จะทำซ้ำแฮชแมปใน Kotlin ได้อย่างไร


คำตอบ:


213

ไม่ใช่เรื่องยาก:

for ((key, value) in map) {
    println("$key = $value")
}

หรือ
( อัปเดตตามข้อมูลของ@ RuckusT-Boomและ@ KenZira )

 map.forEach { (key, value) -> println("$key = $value") }

38
เป็นที่น่าสังเกตว่าเวอร์ชันที่สองอาจทำให้เกิดปัญหาบน Android ดังนั้นคุณอาจต้องการใช้map.forEach { (key, value) -> println("$key = $value") }
Ruckus T-Boom

1
@ RuckusT-Boom มันก่อให้เกิดปัญหาในทางใด?
Anigif

7
Android ไม่ (หรือไม่ได้แสดงความคิดเห็นในขณะนั้น) รองรับ Java 8 อย่างสมบูรณ์และตัวอย่างที่สองคือการเรียก Java 8 โทรเทียบเท่าใช้ Kotlin destructuring ลักษณะคล้ายกันมาก { (key, value) -> ... }แต่คุณต้องวงเล็บรอบข้อโต้แย้ง Ken Zira มีข้อมูลเพิ่มเติมในคำตอบของเขา
Ruckus T-Boom

1
เราพบวิธีที่ยากที่วิธีของ @ RuckusT-Boom จะดีกว่าบน Android :) (เนื่องจาก ClassNotFoundException เราจึงหายาก)
Micha

1
คำตอบของ @ RuckusT-Boom คือคำตอบที่ถูกต้องเรามีปัญหานี้ในระหว่างการทดสอบการเปิดตัวในระดับ API ที่แตกต่างกันและยังไม่ชัดเจนว่าเหตุใดจึงขัดข้องข้อความแสดงข้อผิดพลาดยังทำให้เข้าใจผิด
Alaa Eddine Cherbib

64

สำหรับคำตอบข้างต้นโปรดระวังAndroidด้านล่างN!

map.forEach { key, value -> println("$key = $value") }

อ้างอิงถึงJava 8api ซึ่งนำไปสู่:

Rejecting re-init on previously-failed class java.lang.Class<T>

map.forEach { (key, value) -> println("$key = $value") }

เป็นKotlinคุณลักษณะ


ใช่ฉันเสียเวลาครึ่งวันไปกับเรื่องนี้ด้วย สำหรับ ((key, val) ... ) แก้ไขปัญหาได้
andude

2

อีกวิธีหนึ่งที่ไม่ได้กล่าวถึงคือ:

val mapOfItems = hashMapOf(1 to "x", 2 to "y", -1 to "zz")
mapOfItems.map { (key, value) -> println("$key = $value") }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.