2013-01-10 42 views
51

文字列がリストに存在するかどうかをチェックし、それに応じてブール値を受け入れる関数を呼び出す必要があります。要素がリストに存在するかどうかチェックする

これを1つのライナーで実現することは可能ですか?

次のコードは、私が得ることができるベストです:

val strings = List("a", "b", "c") 
val myString = "a" 

strings.find(x=>x == myString) match { 
    case Some(_) => myFunction(true) 
    case None => myFunction(false) 
} 

私はそれが少ないコーディングでこれを行うことは可能だと確信していますが、私は方法がわかりません!

答えて

75

だけcontains

myFunction(strings.contains(myString)) 
+1

文字列を処理しない場合、値が一致する可能性のある数であるかどうかを確認する必要がありますか? – tutuca

+13

それでは、新しい質問をする必要があります。 –

+1

@tutuca、この[check-if-values-in-list-part-of-string]をチェックしてください(http://stackoverflow.com/questions/16046146 /リスト中の値をチェックすることはストリングの一部である)。 –

23

を使用し、厳格な平等を使いたくなかった場合は、使用することができます存在:


myFunction(strings.exists { x => customPredicate(x) }) 
1

これは、異なる述語でも

myFunction(strings.find(_ == mystring).isDefined) 
を動作するはずです
+3

isDefinedと組み合わされたfindを使わなくても、単にexistを使うことができます – Ciaran0

1

あなたのケースでは、私はあなたが一意の値を持つことを保証するために、リストを使わずにセットを使うことを考えますまあ。重複を含むことが時々必要な場合を除きます。

この場合、リストの周りにラッパー関数を追加する必要はありません。

1

さらに簡単に!

strings contains myString 
+0

[受け入れられた答え](https://stackoverflow.com/a/14267635/8371915)とはどのように違いますか? – user8371915

+0

基本的に同じですが、違いは次のとおりです。1.ブラケットの数が少ない2.期間が少ない3. myFunctionへの参照がありません4.空白が増えました。全体;私の答え= 25文字vs受け入れられる回答= 38文字 – Taylrl

+0

これはレトリックの質問でした;私は[LQP](https://stackoverflow.com/review/low-quality-posts/)からここに来ました。私は、削除をお勧めしませんでしたが、あなたが遅く答えを投稿する場合は、いくつかの追加の値を提供してみてください。文法的な砂糖のビットそれはそれのように感じていない、あなたは知っています。ちょうど... – user8371915

関連する問題