如何映射数组、使用 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 }
我有一堆单词,有些可能有也可能没有错别字。
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 }