Saya memiliki Peta skala dan ingin menguji apakah ada nilai tertentu di peta.
myMap.exists( /*What should go here*/ )
Jawaban:
Ada beberapa opsi berbeda, tergantung apa yang Anda maksud.
Jika yang Anda maksud dengan pasangan kunci-nilai "nilai" , Anda dapat menggunakan sesuatu seperti
myMap.exists(_ == ("fish",3))
myMap.exists(_ == "fish" -> 3)
Jika yang Anda maksud adalah nilai key-value pair , maka Anda bisa
myMap.values.exists(_ == 3)
myMap.exists(_._2 == 3)
Jika Anda hanya ingin menguji kunci dari pasangan nilai kunci , maka
myMap.keySet.exists(_ == "fish")
myMap.exists(_._1 == "fish")
myMap.contains("fish")
Perhatikan bahwa meskipun bentuk tupel (mis. _._1 == "fish"
) Menjadi lebih pendek, bentuk yang sedikit lebih panjang lebih eksplisit tentang apa yang Anda inginkan terjadi.
Apakah Anda ingin tahu apakah nilai tersebut ada di peta, atau kuncinya? Jika Anda ingin memeriksa kunci, gunakan isDefinedAt
:
myMap isDefinedAt key
Anda memberikan tes bahwa salah satu nilai peta akan lulus, yaitu
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 mengatakan tentang metode "Menguji apakah predikat berlaku untuk beberapa elemen dari peta yang tidak dapat diubah ini.", Tangkapannya adalah ia menerima tupel (kunci, nilai) alih-alih dua parameter.
Bagaimana dengan ini:
val map = Map(1 -> 'a', 2 -> 'b', 4 -> 'd')
map.values.toSeq.contains('c') //false
Menghasilkan true
jika peta berisi c
nilai.
Jika Anda bersikeras menggunakan exists
:
map.exists({case(_, value) => value == 'c'})
values
membuat yang baru Iterable
sehingga Anda mungkin lebih baik map.valuesIterator.contains('c')
(meskipun itu tidak semudah map.exists(_._2 == 'c')
!)
Per jawaban di atas, perhatikan bahwa ada () secara signifikan lebih lambat daripada berisi () (Saya telah membandingkan dengan Peta yang berisi 5000 kunci string, dan rasionya x100 yang konsisten). Saya relatif baru mengenal scala tetapi tebakan saya ada () iterasi atas semua kunci (atau kunci, nilai tupple) sedangkan berisi menggunakan akses acak Map