94

私はスカラ マップを持っており、特定の値がマップに存在するかどうかをテストしたいと考えています。

myMap.exists( /*What should go here*/ )
4

5 に答える 5

150

意味に応じて、いくつかの異なるオプションがあります。

「値」のキーと値のペアを意味する場合は、次のようなものを使用できます

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") は最終的には短くなりますが、わずかに長い形式の方が、発生させたい内容がより明確になることに注意してください。

于 2012-05-13T04:39:22.257 に答える
29

がマップまたはキーに存在するかどうかを知りたいですか? キーを確認する場合は、次を使用しますisDefinedAt

myMap isDefinedAt key
于 2012-05-14T02:33:18.427 に答える
9

マップ値の 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 つのパラメーターの代わりにタプル (キー、値) を受け取ることです。

于 2012-05-12T22:18:15.010 に答える
7

これはどうですか:

val map = Map(1 -> 'a', 2 -> 'b', 4 -> 'd')
map.values.toSeq.contains('c')  //false

マップtruec値が含まれている場合に生成されます。

使用を主張する場合exists

map.exists({case(_, value) => value == 'c'})
于 2012-05-12T22:19:58.613 に答える
3

上記の回答によると、exists() は contains() よりも大幅に遅いことに注意してください (5000 個の文字列キーを含むマップでベンチマークを行ったところ、比率は一貫して x100 でした)。私はscalaに比較的慣れていませんが、exists()はすべてのキー(またはキー、値のタプル)を反復処理しているのに対し、containsはMapのランダムアクセスを使用していると思います

于 2016-05-17T05:13:00.280 に答える