如何映射数组,使用 if 子句并过滤掉坏数据?

VDo*_*Dog 2 reduce functional-programming filter swift map-function

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

potentialWords = ["hello", "lkasjdf", "hunry"]
Run Code Online (Sandbox Code Playgroud)

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

然而有些话是无法纠正的!例如"lkasjdf"不会找到任何更正,但"hunry"会。

我正在尝试类似的东西:

potentialWords.map {
  if correctWord($0) != nil {
    return correctWord($0)[0]
  } 
}
Run Code Online (Sandbox Code Playgroud)

当然,这会抱怨并说我需要在 if 子句之外返回。我可以根据单词是否可以更正来过滤列表,然后映射过滤后的列表,重新检查哪些单词需要更正,但是这种correctWord功能方式运行次数太多,并且非常敏感。

我希望能够进行一次传递,并返回所有有效单词的数组,以及更正的单词。

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

Wel*_*122 5

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

potentialWords.flatMap { correctWord($0)?.first }
Run Code Online (Sandbox Code Playgroud)