วิธีนับรายการในแผนที่ Go?


91

ถ้าฉันต้องการนับรายการในโครงสร้างแผนที่ฉันควรใช้คำสั่งใด? ฉันพยายามที่จะใช้

for _, _ := range m {...}

แต่ดูเหมือนว่าไวยากรณ์เป็นเท็จ


2
นอกหัวข้อเล็กน้อยคุณสามารถใช้ได้โดยfor _ := range m {}ไม่จำเป็นต้องมีข้อโต้แย้งสองข้อที่นั่น
Elazar Leibovich

1
BTW ทั้งสองfor _, _ := range m {...}และfor _ := range m {}จะไม่รวบรวม b / c ของ:=ซึ่งไม่สามารถใช้กับ_LHS เท่านั้น =ต้องใช้ในกรณีนี้แทน
zzzz

คำตอบ:


179

ใช้len(m). จากhttp://golang.org/ref/spec#Length_and_capacity

len(s)    string type      string length in bytes
          [n]T, *[n]T      array length (== n)
          []T              slice length
          map[K]T          map length (number of defined keys)
          chan T           number of elements queued in channel buffer

ต่อไปนี้เป็นตัวอย่างสองสามตัวอย่างที่ย้ายมาจากเอกสาร SO ที่เลิกใช้แล้วในขณะนี้:

m := map[string]int{}
len(m) // 0

m["foo"] = 1
len(m) // 1

หากตัวแปรชี้ไปที่nilแผนที่lenจะส่งกลับ 0

var m map[string]int
len(m) // 0

ตัดตอนมาจากแผนที่ - องค์ประกอบแผนที่นับ ผู้เขียนต้นฉบับเป็นSimone Carletti รายละเอียดการแสดงที่สามารถพบได้บนหน้าผู้สนับสนุน แหล่งที่มานี้ได้รับอนุญาตภายใต้CC BY-SA 3.0และสามารถพบได้ในเอกสารประกอบ หัวข้ออ้างอิง ID: 732 และ ID ตัวอย่าง: 2528

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.