मैप में कुंजी या मान मौजूद है या नहीं, इसकी जांच कैसे करें?


87

मेरे पास एक स्काला मैप है और यदि कोई निश्चित मान मानचित्र में मौजूद है तो मैं उसका परीक्षण करना चाहूंगा।

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

जवाबों:


141

कई अलग-अलग विकल्प हैं, जो आपके मतलब के आधार पर हैं।

यदि आप "मूल्य" कुंजी-मूल्य जोड़ी से मतलब रखते हैं , तो आप कुछ का उपयोग कर सकते हैं

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") छोटे होते जा रहे हैं, थोड़े लंबे फॉर्म अधिक स्पष्ट हैं कि आप क्या करना चाहते हैं।


13
यह कहने के लायक भी है कि एक कुंजी के परीक्षण अस्तित्व के लिए, पुस्तकालय myMap.contains ("मछली") प्रदान करता है
डेव ग्रिफ़िथ

2
@DaveGriffith - वास्तव में। मैं बस "अस्तित्व में" का उपयोग कर रहा था, लेकिन इसमें जोड़ने के लिए पर्याप्त महत्वपूर्ण (क्योंकि यह वह है जिसका आपको उपयोग करना चाहिए )। मैंने तदनुसार उत्तर में संशोधन किया है।
रेक्स केर

25

क्या आप जानना चाहते हैं कि क्या मूल्य मानचित्र पर मौजूद है, या कुंजी? यदि आप कुंजी की जांच करना चाहते हैं, तो उपयोग करें isDefinedAt:

myMap isDefinedAt key

9

आप एक परीक्षण प्रदान करते हैं कि मानचित्र मानों में से एक पास होगा, अर्थात

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 विधि के बारे में कहता है "टेस्ट कि क्या एक विधेय इस अपरिवर्तनीय मानचित्र के कुछ तत्वों के लिए रखता है।", पकड़ यह है कि यह दो मापदंडों के बजाय एक टपल (कुंजी, मूल्य) प्राप्त करता है।


6

इस बारे में क्या:

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

trueयदि मैप में पैदावार होती हैc मान मान हो ।

यदि आप उपयोग करने पर जोर देते हैं exists:

map.exists({case(_, value) => value == 'c'})

2
valuesएक नया बनाता है Iterableताकि आप शायद बेहतर हों map.valuesIterator.contains('c')(हालाँकि यह उतना आसान नहीं है map.exists(_._2 == 'c')!)
लुइगी प्लिंज

3

ऊपर दिए गए उत्तर के अनुसार, ध्यान दें कि मौजूद है () में की तुलना में काफी धीमी है () (मैंने 5000 स्ट्रिंग कुंजियों वाले मानचित्र के साथ बेंचमार्क किया है, और अनुपात एक सुसंगत x100 था)। मैं scala के लिए अपेक्षाकृत नया हूं, लेकिन मेरा अनुमान मौजूद है () सभी कुंजियों (या कुंजी, मान टुप्पल) से अधिक परेशान कर रहा है, जबकि इसमें मैप का यादृच्छिक उपयोग शामिल है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.