我有一系列的单词,有些可能有也可能没有错别字。
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,则取第一个索引并将其添加到新变量中列表。
答案 0 :(得分:4)
我认为你是在flatMap
之后。它与地图相同,但它也会滤除任何nil
值。
potentialWords.flatMap { correctWord($0)?.first }