2017-09-23 58 views
0

目前我正在存儲一個映射,鍵是Struct(MyIntC)。我想檢索地圖中的所有鍵作爲切片。切片將是指向地圖鍵的指針。這是因爲沒有多個鍵的副本。golang迭代映射時,如何獲得鍵作爲指針?

當我在這裏嘗試(https://play.golang.org/p/bclmCh_YV5),它不起作用。

切片中的所有元素都將指向迭代的最後一個貼圖元素。

這是爲什麼?我怎麼能克服這個?

注:我懷疑這是非常類似的問題Slice of structs vs a slice of pointers to structs,其中我總是使用本地變量地址。

謝謝。

回答

2

對於與範圍循環中的k有關的問題,您是正確的。 k是一個局部變量,在每次迭代中,您只需將相同的指針地址添加到slice即可。

您始終可以使用指向MyIntC作爲映射關鍵字的指針。

// ... 
slice := make([]*MyIntC,0, 5) 
// ... 
mapInts := make(map[*MyIntC]string) 
// ... 
for k, _ := range mapInts { 
    slice = append(slice, k) 
} 
// ... 

工作例如:https://play.golang.org/p/Opd7RVywNa