2024-01-29 05:09PM
参考:https://bitfieldconsulting.com/golang/map-iteration
在go的映射中,映射的迭代顺序是什么?换句话说,当我们使用 a 循环连续的键时 for 声明中,“连续” 是什么意思?
你可能认为迭代顺序就是你定义键的顺序
eg:我们在 menu 中,首先列出了 eggs,在我们运行的时候,不应该看到 eggs 作为第一个键吗?
package main import "fmt" func main() {
menu := map[string]float64{ "eggs": 1.75, "bacon": 3.22, "sausage": 1.89, }
for dish, price := range menu {
fmt.Println(dish, price)
}
}
但事实上,不是这样的,运行结果如下:
meiyi@meiyi-Extensa-2511G:~/workspace/go$ go run map_iterate.go
sausage 1.89
egg 1.75
bacon 3.22
因为 go规范说迭代顺序并没有指定。也就是说,你不应该期望键值以任何特定的顺序出现,不能依赖于以特定的顺序迭代map。
映射的迭代顺序也不稳定,这意味着每次运行时,它的结果不一定是相同的。
请注意:如果编写依赖于按特定顺序出现的映射键的测试:这将是一个不稳定的测试,可能一次通过,下一次失败!
但是当你在go中打印map时,它始终按键顺序排列。 这是为了使测试更容易,但不要依赖于此。 您不应该认为地图具有任何固有的顺序。
eg:运行几次 map_iterate.go 文件,顺序的结果是不一致的
meiyi@meiyi-Extensa-2511G:~/workspace/go$ go run map_iterate.go
egg 1.75
bacon 3.22
sausage 1.89
meiyi@meiyi-Extensa-2511G:~/workspace/go$ go run map_iterate.go
sausage 1.89
egg 1.75
bacon 3.22
meiyi@meiyi-Extensa-2511G:~/workspace/go$ go run map_iterate.go
bacon 3.22
sausage 1.89
egg 1.75
登录
请登录后再发表评论。
评论列表:
目前还没有人发表评论