【问题标题】:Filter Words from One List with Words from Another用另一个列表中的单词过滤一个列表中的单词
【发布时间】:2017-02-17 03:24:34
【问题描述】:

我是一个相对较新的程序员,通过 udemy 课程学习 scala 和函数式编程。

我正在寻求根据另一个字符串列表过滤字符串列表。我想减少第一个列表,这样当我打印出来时,它只包含单词 - “rob”,“learns”,“scala”

这是我正在使用的代码:

val list1:Array[String] = Array("rob","you", "to","learns", "your", "the","scala", "a")

val badWords:Array[String] = Array("you", "to", "your", "the", "a")

val list2 = list1.map(x => badWords.map(badWord => list1.filter(word => word != badWord)))

for (word <- list2) {
  println(word)
}

我的逻辑是,对于 list1 中的每个单词,然后我尝试将每个 badWord 元素与当前 list1 项进行比较,以确定是否应该过滤它。

我已通过硬编码我想要过滤的内容(例如val list2 = list1.filter(_ != "to"))成功运行此程序。显然,我想赋予它扩展的能力,所以我想学习如何配对过滤器和映射函数(如果这是正确的方法)。

提前致谢,如果我应该提供更多信息或上下文,请告诉我。

【问题讨论】:

  • list1 diff badWords
  • 是的,这就是我想要实现的目标
  • 不要使用差异,它不会删除多个坏词实例

标签: scala filter functional-programming


【解决方案1】:

您可以为此使用非常简单的 sn-p:

list1.filter(!badWords.contains(_))

这将删除所有在 badWords 列表中的单词。我不确定这是否适用于数组,所以我建议改用列表。

例子:

val words = List("Hello", "Hello", "World")
val badWords = List("Hello")
val filteredWords = words.filter(!badWords.contains(_))

【讨论】:

  • 我查了一下,成功了!
  • 有人还评论说您可以执行以下操作:val list2 = list1.filterNot(badWords.contains) - 与您建议的相同,只是语法不同
  • 一般情况下,您不想将badWords 转换为Set,因为Set 中的查找时间为O(1),而@987654327 中的查找时间为O(n) @.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
相关资源
最近更新 更多