Làm thế nào để lặp lại bản đồ scala?


81

Tôi có bản đồ scala:

attrs: Map[String , String]

Khi tôi cố gắng lặp lại bản đồ như;

attrs.foreach { key, value =>     }

ở trên không hoạt động. Trong mỗi lần lặp, tôi phải biết đâu là khóa và đâu là giá trị. Cách thích hợp để lặp qua bản đồ scala bằng cách sử dụng đường cú pháp scala là gì?

Câu trả lời:


72

foreachphương thức nhận Tuple2[String, String]là đối số, không phải 2 đối số. Vì vậy, bạn có thể sử dụng nó như tuple:

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

hoặc bạn có thể làm cho mẫu phù hợp:

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

6
nhìn vào câu trả lời của Rex, lựa chọn tốt hơn có
iwein

156

Ba lựa chọn:

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

Bí quyết là sự lặp lại cung cấp cho bạn các cặp khóa-giá trị, mà bạn không thể tách thành một tên định danh khóa và giá trị mà không sử dụng casehoặc for.


1

Tôi đã thêm một số cách khác để lặp lại các giá trị bản đồ.

// 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))
  }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.