【问题标题】:How to map over an array, use an if clause, and filter out the bad data?如何映射数组、使用 if 子句并过滤掉坏数据?
【发布时间】:2018-04-21 16:36:18
【问题描述】:

我有一组单词,有些可能有错别字。

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

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

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

我正在尝试类似:

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

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

我希望能够一次通过,并返回一个包含所有有效单词的数组,以及更正的单词。

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

【问题讨论】:

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


    【解决方案1】:

    我想你在关注flatMap。它与 map 相同,只是它也会过滤掉任何 nil 值。

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

    【讨论】:

      猜你喜欢
      • 2014-12-30
      • 2022-01-14
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-12
      相关资源
      最近更新 更多