使用另一个单词从一个列表中过滤单词

Rob*_*b Z 1 functional-programming scala filter

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

我正在寻找根据另一个字符串列表过滤字符串列表.我想减少第一个列表,这样当我打印出来时,它只包含单词 - "rob","learn","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)
}
Run Code Online (Sandbox Code Playgroud)

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

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

在此先感谢,如果我应该提供进一步的信息或背景,请告诉我.

Vog*_*ltz 5

您可以使用一个非常简单的代码段:

list1.filter(!badWords.contains(_))
Run Code Online (Sandbox Code Playgroud)

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

例:

val words = List("Hello", "Hello", "World")
val badWords = List("Hello")
val filteredWords = words.filter(!badWords.contains(_))
Run Code Online (Sandbox Code Playgroud)

  • 一般情况下你不想将`badWords`转换为`Set`,因为`Set`中的查找时间是O(1),而`List`中的查找时间是O(n). (2认同)