从一个列表中过滤单词和另一个单词
我是一个相对较新的程序员,通过udemy类学习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元素比较与当前列表1项,以确定是否应该过滤与否。
我已经通过硬编码在我想过滤的内容中成功运行了此操作,例如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(_))
我检查,这是成功了! –
有人还评论说,你可以做以下事情:'val list2 = list1.filterNot(badWords.contains)' - 你建议的同样的事情,只是不同的语法 –
是的,这是有效的,但它是一个不太知名的函数 –
'list1的差异badWords' – jwvh
是的,这就是我一直在寻找实现 –
不使用差异,它不会删除一个坏词的多个实例 –