Scalaは要素がリストに存在するかどうかをチェックします


86

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

ワンライナーでこれを達成することは可能ですか?

以下のコードは私が得ることができる最高のものです:

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

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

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

回答:



32

また、厳密な等式を使用したくない場合は、existsを使用できます。


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

14

さらに簡単!

strings contains myString

4
それは受け入れられた答えとどう違うのですか?
アルパート ターカー

2
基本的には同じですが、違いは次のとおりです。1。角かっこが少ない2.ピリオドが少ない3.myFunctionへの参照がない4.空白が多い。全体; 受け入れられた答え= 38文字VS私の答えは= 25の文字
Taylrl

それはレトリックの質問でした;)私がここでLQPから得た文脈をあなたに与えるために。削除はお勧めしませんが、遅い回答を投稿する場合は、追加の価値を提供してみてください。糖衣構文のビットは、それがそれのように感じない、あなたが知っている。ただ...言って
アルパースのトン。ターカー2018年

3
問題はありません。わかります。シンプルさを増すことで付加価値があると思います。とにかくありがとう:)
Taylrl 2018年

3

これは、異なる述語でも機能するはずです

myFunction(strings.find( _ == mystring ).isDefined)

3
isDefinedと組み合わせてfindを使用する代わりにexistsを使用することもできます
Ciaran0

2

あなたの場合、一意の値のみを持つように、リストではなくセットを使用することを検討します。時々重複を含める必要がない限り。

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


-3

containsメソッドを実装することもできますfoldLeft、それはかなり素晴らしいです。foldLeftアルゴリズムが大好きです。

例えば:

object ContainsWithFoldLeft extends App {

  val list = (0 to 10).toList
  println(contains(list, 10)) //true
  println(contains(list, 11)) //false

  def contains[A](list: List[A], item: A): Boolean = {
    list.foldLeft(false)((r, c) => c.equals(item) || r)
  }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.