从一个列表中过滤单词和另一个单词

问题描述:

我是一个相对较新的程序员,通过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")。很显然,我想给这个扩展的能力,所以我想学习如何配对过滤器和映射函数(如果这是正确的方法)。

在此先感谢,请告知我是否应提供更多信息或上下文。

+1

'list1的差异badWords' – jwvh

+0

是的,这就是我一直在寻找实现 –

+1

不使用差异,它不会删除一个坏词的多个实例 –

你可以用一个非常简单的代码段用于此:

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

这将删除所有也都在BADWORDS列表中的单词。林不知道这是否会与阵列工作,所以我建议使用列表。

例子:

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

我检查,这是成功了! –

+0

有人还评论说,你可以做以下事情:'val list2 = list1.filterNot(badWords.contains)' - 你建议的同样的事情,只是不同的语法 –

+0

是的,这是有效的,但它是一个不太知名的函数 –