कैसे बनायें स्कैल्ट मैप?


81

मेरे पास स्काला मैप है:

attrs: Map[String , String]

जब मैं मानचित्र पर पुनरावृति करने की कोशिश करता हूं जैसे;

attrs.foreach { key, value =>     }

ऊपर काम नहीं करता है। प्रत्येक पुनरावृत्ति में मुझे पता होना चाहिए कि कुंजी क्या है और मूल्य क्या है। स्केला सिंटैक्टिक शुगर का उपयोग करके स्केल मैप पर पुनरावृति करने का उचित तरीका क्या है?

जवाबों:


72

foreachविधि Tuple2[String, String]तर्क के रूप में प्राप्त होती है, न कि 2 तर्क। तो आप या तो इसका उपयोग कर सकते हैं:

attrs.foreach {keyVal => println(keyVal._1 + "=" + keyVal._2)}

या आप पैटर्न मैच कर सकते हैं:

attrs.foreach {case(key, value) => ...}

6
रेक्स के उत्तर को देखें, वहां बेहतर विकल्प हैं
आईवीएन

158

तीन विकल्प:

attrs.foreach( kv => ... )          // kv._1 is the key, kv._2 is the value
attrs.foreach{ case (k,v) => ... }  // k is the key, v is the value
for ((k,v) <- attrs) { ... }        // k is the key, v is the value

चाल यह है कि पुनरावृत्ति आपको कुंजी-मूल्य जोड़े देती है, जिन्हें आप caseया तो उपयोग किए बिना कुंजी और मान पहचानकर्ता नाम में विभाजित नहीं कर सकते for


2

मैंने मानचित्र मानों को पुनरावृत्त करने के लिए कुछ और तरीके जोड़े हैं।

// Traversing a Map
  def printMapValue(map: collection.mutable.Map[String, String]): Unit = {

    // foreach and tuples
    map.foreach( mapValue => println(mapValue._1 +" : "+ mapValue._2))

    // foreach and case
    map.foreach{ case (key, value) => println(s"$key : $value") }

    // for loop
    for ((key,value) <- map) println(s"$key : $value")

    // using keys
    map.keys.foreach( key => println(key + " : "+map.get(key)))

    // using values
    map.values.foreach( value => println(value))
  }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.