Bir ölçek haritam var ve haritada belirli bir değer olup olmadığını test etmek istiyorum.
myMap.exists( /*What should go here*/ )
Yanıtlar:
Ne demek istediğine bağlı olarak birkaç farklı seçenek var.
"Değer" anahtar / değer çifti ile kastediyorsanız , şu gibi bir şey kullanabilirsiniz:
myMap.exists(_ == ("fish",3))
myMap.exists(_ == "fish" -> 3)
Anahtar / değer çiftinin değerini kastediyorsanız , şunları yapabilirsiniz:
myMap.values.exists(_ == 3)
myMap.exists(_._2 == 3)
Yalnızca anahtar / değer çiftinin anahtarını test etmek istiyorsanız ,
myMap.keySet.exists(_ == "fish")
myMap.exists(_._1 == "fish")
myMap.contains("fish")
Demet formlarının (örneğin _._1 == "fish"
) daha kısa olmasına rağmen, biraz daha uzun formların olmasını istediğiniz şey hakkında daha açık olduğunu unutmayın.
Değerin haritada veya anahtar üzerinde olup olmadığını bilmek ister misiniz ? Anahtarı kontrol etmek istiyorsanız, şunu kullanın isDefinedAt
:
myMap isDefinedAt key
harita değerlerinden birinin geçeceği bir test sağlarsınız, örn.
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, "Bir yüklemin bu değişmez haritanın bazı öğeleri için geçerli olup olmadığını test eder." Yöntemini söyler, yakalama, iki parametre yerine bir demet (anahtar, değer) almasıdır.
Peki buna ne dersin:
val map = Map(1 -> 'a', 2 -> 'b', 4 -> 'd')
map.values.toSeq.contains('c') //false
true
Harita içeriyorsa verimc
değerini.
Kullanmakta ısrar ediyorsanız exists
:
map.exists({case(_, value) => value == 'c'})
values
yeni bir tane yaratır, Iterable
bu yüzden muhtemelen daha iyi map.valuesIterator.contains('c')
map.exists(_._2 == 'c')
Yukarıdaki yanıtlara göre, var () öğesinin contains () değerinden önemli ölçüde daha yavaş olduğuna dikkat edin (5000 dize anahtarı içeren bir Harita ile karşılaştırmalı değerlendirme yaptım ve oran tutarlı bir x100 idi). Ölçekleme konusunda nispeten yeniyim ama tahminim var () tüm anahtarlar (veya anahtar, değer tupple) üzerinde yineleniyor, oysa içerir Map'in rastgele erişimini kullanıyor