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,则取第一个索引并将其添加到新列表中。
我认为你在追求flatMap
。它与 map 相同,除了它还会过滤掉任何nil
值。
potentialWords.flatMap { correctWord($0)?.first }
Run Code Online (Sandbox Code Playgroud)