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

时间:2017-11-08 20:29:35

标签: swift filter functional-programming reduce map-function

我有一系列的单词,有些可能有也可能没有错别字。

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

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

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

我正在尝试类似的事情:

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

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

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

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

1 个答案:

答案 0 :(得分:4)

我认为你是在flatMap之后。它与地图相同,但它也会滤除任何nil值。

potentialWords.flatMap { correctWord($0)?.first }