scalaマップがあり、マップに特定の値が存在するかどうかをテストしたいと思います。
myMap.exists( /*What should go here*/ )
意味に応じて、いくつかの異なるオプションがあります。
「値」キーと値のペアの場合は、次のようなものを使用できます
myMap.exists(_ == ("fish",3))
myMap.exists(_ == "fish" -> 3)
キーと値のペアの値を意味する場合、次のことができます。
myMap.values.exists(_ == 3)
myMap.exists(_._2 == 3)
キーと値のペアのキーだけをテストしたい場合は、
myMap.keySet.exists(_ == "fish")
myMap.exists(_._1 == "fish")
myMap.contains("fish")
タプルフォーム(例:_._1 == "fish"
)は短くなりますが、わずかに長いフォームは、何が起きたいかをより明確にすることに注意してください。
valueがマップに存在するのか、キーに存在するのか知りたいですか?キーを確認する場合は、isDefinedAt
を使用します。
myMap isDefinedAt key
マップ値の1つが合格するテストを提供します。
val mymap = Map(9->"lolo", 7->"lala")
mymap.exists(_._1 == 7) //true
mymap.exists(x => x._1 == 7 && x._2 == "lolo") //false
mymap.exists(x => x._1 == 7 && x._2 == "lala") //true
ScalaDocsによると、「この不変のマップの一部の要素について述語が保持されているかどうかをテストします。」というキャッチは、2つのパラメーターの代わりにTuple(キー、値)を受け取るということです。
これはどうですか:
val map = Map(1 -> 'a', 2 -> 'b', 4 -> 'd')
map.values.toSeq.contains('c') //false
マップにtrue
値が含まれる場合、c
を生成します。
exists
の使用を主張する場合:
map.exists({case(_, value) => value == 'c'})
上記の回答によると、exists()はcontains()よりもかなり遅いことに注意してください(5000個の文字列キーを含むマップでベンチマークを行い、比率は一貫したx100でした)。私はscalaに比較的新しいですが、私の推測はexists()がMapのランダムアクセスを使用するのに対し、すべてのキー(またはキー、値のタプル)を反復していることです