filter
は、filter
メソッドに渡された関数がtrue
を返すものを削除します。したがって、Regexはあなたが望むものではありません。
val filterFunction: (String, String) => Boolean =
(row, candidate) => row.split(" ").tail.head.startsWith(candidate)
我々はこれはかなり簡単に使用して動作することを自分自身を納得させることができます。その代わり、その行の2番目の列が候補で始まる場合の行を取り、候補文字列に対してそれを比較し、true
返す関数を開発してみましょうワークシート:
// Test data
val mylist = List("Inter", "Intra")
val file = List("Cricket Inter-house", "Boom Shakalaka")
filterFunction("Cricket Inter-house", "Inter") // true
filterFunction("Cricket Inter-house", "Intra") // false
filterFunction("Boom Shakalaka", "Inter") // false
filterFunction("Boom Shakalaka", "Intra") // false
残っているのは、この機能をフィルタで利用することです。基本的には、すべての行について、候補リストのすべての行に対してフィルタをテストする必要があります。それは、候補リストを取って、それに対して機能しているすべてのアイテムをチェックするために「左折」を意味します。いずれかの候補が真報告された場合は、その後、我々は、その行が最終結果からフィルタリングする必要があります知っている:
val result = file.filter((row: String) => {
!mylist.foldLeft(false)((x: Boolean, candidate: String) => {
x || filterFunction(row, candidate)
})
})
// result: List[String] = List(Boom Shakalaka)
上記解凍するために少し密集することができます。 filter
メソッドには、行をとりブール値を生成する関数が渡されています。その値がtrue
になるようにするには、行がGoogleの条件と一致しない場合にのみ値を設定します。我々はすでにfilterFunction
に条件を埋め込んでいます:mylist
の項目のすべての組み合わせに対してそれを実行するだけです。
これを行うには、開始値(この場合はfalse
)をとり、リストを繰り返し反復してその開始値を更新し、最終結果を返すfoldLeft
を使用します。
この値を '更新'するには、行と現在の項目に対してフィルタの機能を実行した結果と開始値を論理的にORする関数を書き込みます(mylist
)。