【问题标题】:How can I invert the order of items in a golang map? [duplicate]如何反转 golang 地图中项目的顺序? [复制]
【发布时间】:2018-12-16 03:48:34
【问题描述】:

我是 golang 新手,我想在这样的地图中颠倒对出现的顺序,以便最后一对出现:

mapA := map[string]int {
    "cat": 5,
    "dog": 2,
    "fish": 3 ,
}


fmt.Println(mapA)


map[cat:5 dog:2 fish:3]

生成的地图应该是这样的:

map[fish:3 dog:2 cat:5]

它可以是一个新的mapB,具有相同的项目但顺序相反。

我怎样才能做到这一点?

【问题讨论】:

  • 你不能,因为地图中没有开始的顺序。

标签: go


【解决方案1】:

The Go Programming Language Specification

Map types

地图是一组无序的元素。

For statements

地图上的迭代顺序未指定且无法保证 从一个迭代到下一个迭代都是一样的。


你不能。围棋地图没有顺序。 Go map 是一个 hash map(哈希表)。

要按顺序(或倒序)获取地图内容,请将地图内容读入切片并排序。


Hash table - Wikipedia

散列表使用散列函数来计算一个数组的索引 桶或槽,从中可以找到所需的值。

缺点

可以有效地枚举存储在哈希表中的条目(在 每个条目的恒定成本),但仅以某种伪随机顺序排列。 因此,没有有效的方法来定位其键为 最接近给定键。以特定顺序列出所有 n 个条目 通常需要单独的排序步骤,其成本成正比 记录每个条目。

【讨论】:

  • 创建一个项目倒序的新地图怎么样?
  • @Babr 地图是无序的。创建一个新地图将导致另一个无序的地图。
  • 彼得试图指出的一点是地图没有“顺序”。如果您想要某种带有索引的列表,您想使用切片:tour.golang.org/moretypes/7
猜你喜欢
  • 1970-01-01
  • 2011-01-05
  • 2017-08-22
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-21
相关资源
最近更新 更多