私はスカラ マップを持っており、特定の値がマップに存在するかどうかをテストしたいと考えています。
myMap.exists( /*What should go here*/ )
私はスカラ マップを持っており、特定の値がマップに存在するかどうかをテストしたいと考えています。
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'})
上記の回答によると、exists() は contains() よりも大幅に遅いことに注意してください (5000 個の文字列キーを含むマップでベンチマークを行ったところ、比率は一貫して x100 でした)。私はscalaに比較的慣れていませんが、exists()はすべてのキー(またはキー、値のタプル)を反復処理しているのに対し、containsはMapのランダムアクセスを使用していると思います