我是一个相对较新的程序员,通过一个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.filter(!badWords.contains(_))


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

例:

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

09-26 06:45
查看更多