มีวิธีรับรายการคีย์ทั้งหมดในแผนที่ภาษา Go หรือไม่? จำนวนองค์ประกอบถูกกำหนดโดยlen()
แต่ถ้าฉันมีแผนที่เช่น:
m := map[string]string{ "key1":"val1", "key2":"val2" };
ฉันจะทำซ้ำคีย์ทั้งหมดได้อย่างไร
มีวิธีรับรายการคีย์ทั้งหมดในแผนที่ภาษา Go หรือไม่? จำนวนองค์ประกอบถูกกำหนดโดยlen()
แต่ถ้าฉันมีแผนที่เช่น:
m := map[string]string{ "key1":"val1", "key2":"val2" };
ฉันจะทำซ้ำคีย์ทั้งหมดได้อย่างไร
คำตอบ:
https://play.golang.org/p/JGZ7mN0-U-
for k, v := range m {
fmt.Printf("key[%s] value[%s]\n", k, v)
}
หรือ
for k := range m {
fmt.Printf("key[%s] value[%s]\n", k, m[k])
}
รายละเอียดภาษา Go สำหรับfor
ข้อความสั่งระบุว่าค่าแรกคือคีย์ตัวแปรตัวที่สองคือค่า แต่ไม่จำเป็นต้องมีอยู่
นี่คือวิธีง่ายๆในการรับslice
แผนที่ - ปุ่ม
// Return keys of the given map
func Keys(m map[string]interface{}) (keys []string) {
for k := range m {
keys = append(keys, k)
}
return keys
}
// use `Keys` func
func main() {
m := map[string]interface{}{
"foo": 1,
"bar": true,
"baz": "baz",
}
fmt.Println(Keys(m)) // [foo bar baz]
}
Keys
ฟังก์ชั่นนี้จะใช้แผนที่พร้อมกับกุญแจทุกประเภทไม่ใช่แค่สายอักขระ?
func Keys(m map[interface{}]interface{}) (keys []interface{})
, @ RobertT.McGibbon คุณต้องเปลี่ยนฟังก์ชั่น "prototype"
map[interface{}]interface{}
เท่านั้น Go ไม่รองรับยาชื่อสามัญ คุณไม่สามารถสร้างฟังก์ชั่นด้วยmap
พารามิเตอร์ที่ยอมรับแผนที่ที่มีประเภทของคีย์ที่แตกต่างกัน
มีวิธีรับรายการคีย์ทั้งหมดในแผนที่ภาษา Go หรือไม่
ks := reflect.ValueOf(m).MapKeys()
ฉันจะทำซ้ำคีย์ทั้งหมดได้อย่างไร
ใช้คำตอบที่ยอมรับได้:
for k, _ := range m { ... }
for _, k := range v.MapKeys()
ตั้งแต่ในตัวอย่างของคุณk
จะเป็นดัชนี int ของส่วนของคีย์