2017-02-16 10 views
1

私はudemyクラスを介してスカラーと関数型プログラミングを学ぶ比較的新しいプログラマです。他の単語を含む1つのリストからのフィルタワード

私は、別の文字列のリストに基づいて文字列のリストをフィルタリングしようとしています。

:「奪う」、「学習する」、「スカラ座」

ここで私が働いているコードだ - 私はそれをプリントアウトするとき、それは言葉だけを含むように私は、ダウン最初のリストを削減したいです

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) 
 
}

私の論理は、リスト1からの各単語のために、私はそれがフィルタリングするかどうかを決定するために、現在のリスト1の項目に対してそれぞれ不適切な単語の要素を比較してみてくださいということです。

val list2 = list1.filter(_ != "to")のように、私がフィルタリングしたいものをハードコーディングしてこれを正常に実行しました。明らかに、私はこれに拡大縮小機能を与えたいので、フィルタとマップ関数をペアにする方法を学びたいと思います(正しい方法であれば)。

ありがとうございます、私はさらに情報や文脈を提供する必要がある場合はお知らせください。

+1

'リスト1の差分badWords' – jwvh

+0

はいそれは私が –

+1

いけない差分を使用達成するために探していたもので、それは文句を言わない悪い言葉 –

答えて

3

あなたは、このために非常に簡単なスニペットを使用することができます。

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

これはBADWORDSリストでもあるすべての単語を削除します。しかし、これは配列で動作するかどうかわからないので、代わりにListを使うことをお勧めします。

例:

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

それはうまく機能しますが、あまり知られていない機能です –

関連する問題