当前位置: 首页 > 面试题库 >

为什么打印时Go的地图迭代顺序会有所不同?

江佐
2023-03-14
问题内容
package main

import "fmt"

func main(){
    sample := map[string]string{
    "key1":"value1",
    "key2":"value2",
    "key3":"value3",
    }
    for i := 0;i<3;i++{
        fmt.Println(sample)
    }
}

上面的go代码仅打印一次map [string] string三次。

我希望它具有固定的输出,但它显示如下:

map[key3:value3 key2:value2 key1:value1]
map[key1:value1 key3:value3 key2:value2]
map[key2:value2 key1:value1 key3:value3]

变了!

而在python中:

#!/bin/env python
#encoding=utf8

sample = {
    "key1":"value1",
    "key2":"value2",
    "key3":"value3",
}
for i in range(3):
    print sample

输出:

{'key3': 'value3', 'key2': 'value2', 'key1': 'value1'}
{'key3': 'value3', 'key2': 'value2', 'key1': 'value1'}
{'key3': 'value3', 'key2': 'value2', 'key1': 'value1'}`

问题答案:

您不能依靠获得密钥的顺序。语言规范说:
“一个映射是一组无序的元素”,后来又说:
“未指定映射的迭代顺序,并且不能保证每次迭代之间都相同。”



 类似资料:
  • 问题内容: 我有一个导航栏作为地图: 其中具有各种属性,子项等。当我尝试渲染导航栏(带有)时,它以随机顺序显示。我知道它在运行时会随机排序,但是似乎无法获取有序的键列表或按插入顺序进行迭代。 游乐场链接位于此处:http : //play.golang.org/p/nSL1zhadg5,尽管它似乎没有表现出相同的行为。 如何在不破坏插入顺序的情况下迭代此映射? 问题答案: Go地图不保持插入顺序;

  • 问题内容: 在围棋编程语言规范说: 3.未指定地图的迭代顺序。[…] 这是可以预期的,因为地图类型可以实现为哈希表,搜索树或其他某种数据结构。但是,如何在Go中实现呢? 换句话说,是什么决定了键的迭代顺序 我开始怀疑这个之后,我看到了地图键显然 也 有一定的迭代顺序。像这样的程序 在我的机器上打印以下内容: 无论 插入顺序如何。 带有映射的等效程序也以随机顺序打印键,但是这里的键顺序 取决于 插入

  • 问题内容: 在Java中,我注意到有时在我的代码中,语句先显示在语句之前,尽管后者先出现在语句之前。为什么?我很好奇。 问题答案: 通常,它是缓冲的输出流,因此在将文本刷新到目标位置之前会对其进行累积。由于可以最大程度地减少必须进行的昂贵系统调用的次数,因此可以大大提高打印大量文本的应用程序的性能。但是,这意味着文本并不总是立即显示,并且可能比书写的要晚得多。 另一方面,通常不缓冲,因为需要立即打

  • 问题内容: 我担心给出的文件和目录的顺序。如果我有这些目录,,,,,,,,,,,,,什么是输出列表的顺序? 它是按数值排序的吗? 或按ASCII值排序,如? 此外,如何获得特定的排序? 问题答案: 用途。这是的文档字符串: listdir(路径)-> list_of_strings 返回一个列表,其中包含目录中条目的名称。 该列表按任意顺序排列 。它不包括特殊条目“。” 和“ ..”,即使它们存在

  • 问题内容: 我有一个类,我们称它为Cls,其中包含一些值。当我使用声明为的Gson实例并将其用于序列化Cls对象并将结果JSON字符串打印到控制台时,我得到了格式正确的格式,如下所示: 这一切都很好,但是当我然后创建一个JsonWriter(从具有绝对路径的FileWriter)并使用带有Cls 的Gson实例的方法时,生成的文件就不会得到很好的格式化。相反,它看起来像这样: 这打败了漂亮印刷的全

  • 我发现了下面的代码。我知道,它看起来没有这个使用看似随机数的方法那么怪异/刺激,但它似乎比这个使用大量数字的位移的方法更复杂: Ideone上的代码 输出: 它是如何工作的?它是某种形式的加密,还是有人在构造它时发疯了?