2012-05-12 15 views
61

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

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

उत्तर

94

वहाँ कई अलग अलग विकल्प, तुम क्या मतलब है पर निर्भर करता है।

आप द्वारा "मूल्य" कुंजी-मान पेयर मतलब है, तो आप की तरह

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

+8

यह भी कहने लायक है कि एक कुंजी के अस्तित्व का परीक्षण करने के लिए, लाइब्रेरी myMap.contains ("मछली") –

+2

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

8

आप एक परीक्षण है कि नक्शे में से एक मान पारित करेंगे, यानी

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

5

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

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

'मान' एक नया 'Iterable' बनाता है ताकि आप शायद बेहतर हो 'map.valuesIterator.contains ('c')' (हालांकि यह 'map.exists (_._ 2 == 'c')'! के रूप में आसान नहीं है) –

14

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

myMap isDefinedAt key 
0

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

संबंधित मुद्दे

 संबंधित मुद्दे