【发布时间】:2017-07-27 09:28:01
【问题描述】:
好的,我认为这可能是一个老问题,但我没有在 stackoverflow 上找到任何东西。在 go 中,不能保证地图上的迭代顺序是可重现的。因此,建议的方法是将键保存在切片中并对该切片进行排序。然后遍历该切片以从映射中检索值,以便我们按顺序获取它们(因为由键组成的切片已排序,因此将按可重现的顺序)。所以这意味着需要对切片进行排序,否则切片上的迭代也不会给出可重现的顺序。但是当我在操场上尝试下面的代码时,我总是发现在迭代中保持顺序,那么在 map 迭代的情况下,为什么需要对键的切片进行排序?
func main() {
var mySlice = make([]string, 0)
mySlice = append(mySlice, "abcd")
mySlice = append(mySlice, "efgh")
mySlice = append(mySlice, "ijkl")
mySlice = append(mySlice, "mnop")
mySlice = append(mySlice, "qrst")
mySlice = append(mySlice, "uvwxyz")
for _, val := range mySlice {
fmt.Println(val)
}
fmt.Println(strings.Join(mySlice, "|"))
}
输出:
abcd
efgh
ijkl
mnop
qrst
uvwxyz
abcd|efgh|ijkl|mnop|qrst|uvwxyz
【问题讨论】:
-
你把切片和地图混在一起了。