2017-02-16 119 views
1

我是一個相對較新的程序員,通過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

不使用差異,它不會刪除一個壞詞的多個實例 –

回答

3

你可以用一個非常簡單的代碼段用於此:

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

是的,這是有效的,但它是一個不太知名的函數 –

相關問題