登录 主页

go - map 迭代顺序

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

 

返回>>

登录

请登录后再发表评论。

评论列表:

目前还没有人发表评论