Go:数组和地图必须是不同的概念/特征吗?

时间:2014-08-13 19:11:45

标签: go

PHP中的数组使用数字键和字符串键。哪个太棒了。

例如:

$array[0] = "My value.";

$array['key'] = "My value";

为什么不实现像这样的数组呢?

在Go中有两个不同的概念和语法(地图)有什么好处?

我相信我没有看到这背后的用处。

2 个答案:

答案 0 :(得分:11)

Go不是PHP。虽然一些高级语言共享这种抽象,但它并不常见。数组和地图是用于不同目的的不同数据结构。

PHP的数组实际上是哈希表。 Go拥有真正的数组,并且它具有对数组更强大的抽象。

拥有真正的数组,为您提供可预测的内存布局和真正的O(1)索引(对于Go内部的切片,内部使用数组也是如此)。使用底层数据存储的哈希映射会使所有操作的开销成本不断增加,并且无法更好地控制数据局部性。

答案 1 :(得分:3)

其中一个主要原因是数组有顺序而地图没有,这具有如here所述的重要含义:

  

当使用范围循环迭代地图时,未指定迭代顺序,并且不保证从一次迭代到下一次迭代相同。如果需要稳定的迭代顺序,则必须维护一个指定该顺序的单独数据结构。