私はscalaMapを持っていて、特定の値がマップに存在するかどうかをテストしたいと思います。
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"
)は最終的に短くなりますが、少し長いフォームは、何をしたいのかをより明確にすることに注意してください。
値がマップに存在するのか、それともキーに存在するのかを知りたいですか?キーを確認したい場合は、以下を使用してください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つのパラメーターの代わりにタプル(キー、値)を受け取ることです。
これはどうですか:
val map = Map(1 -> 'a', 2 -> 'b', 4 -> 'd')
map.values.toSeq.contains('c') //false
利回りtrue
マップが含まれている場合はc
値を。
あなたが使用することを主張する場合exists
:
map.exists({case(_, value) => value == 'c'})
values
新しいIterable
ものを作成するので、おそらくあなたのほうが良いでしょうmap.valuesIterator.contains('c')
(それはそれほど簡単ではありませんがmap.exists(_._2 == 'c')
!)