如何映射数组、使用 if 子句并过滤掉不良数据?

How to map over an array, use an if clause, and filter out the bad data?

我有一堆单词,有些可能有也可能没有错别字。

potentialWords = ["hello", "lkasjdf", "hunry"]

我想要做的是 return 所有有效单词的数组,以及那些能够使用我创建的函数自动更正的单词 correctWord。它 return 是一组潜在的匹配项。所以 "hunry" 可能 return ["hungry", "hurry"]。我将 select 第一个索引进行最佳猜测。

但是有些字无法更正!例如"lkasjdf" 不会找到任何更正,但 "hunry" 会。

我正在尝试类似的东西:

potentialWords.map {
  if correctWord([=11=]) != nil {
    return correctWord([=11=])[0]
  } 
}

当然这会抱怨说我需要一个if子句外的return。我可以根据单词是否可以更正来过滤列表,然后映射过滤后的列表,重新检查哪些单词需要更正,但这会运行 correctWord 函数太多次,而且它是非常敏感。

我希望能够进行一次遍历,return 一个包含所有有效单词和更正单词的数组。

P.S。为了简洁起见,我在 map 函数中调用了两次 correctWord,但当然我会将 correctWord([=19=]) 分配给一个变量,然后如果它不是 nil,则取第一个索引并将其添加到新的列表。

我认为你在追求 flatMap。它与 map 相同,除了它还会过滤掉任何 nil 值。

potentialWords.flatMap { correctWord([=10=])?.first }