关于迭代学习过程中遇到的问题

liangdian · 2013-12-01 17:41:47 · 3524 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2013-12-01 17:41:47 的主题,其中的信息可能已经有所发展或是发生改变。

package main

import "fmt"
func main(){
    m := map[int]string{1: "a", 2: "b", 3: "c", 4: "d", 5: "e"}
    //slice
    s := make([]int, len(m))
    i := 0
    for k, _ := range m {
        s[i] = k
        i++
    }
    fmt.Println(s)
}

以上代码在无闻的《go编程基础》第八集,21:25,无闻的结果显示,s的结果是乱序的,但是我自己机器上面测试确实有序的呢,为什么?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3524 次点击  
加入收藏 微博
3 回复  |  直到 2013-12-03 06:55:44
lovegolang
lovegolang · #1 · 11年之前

map 不能保证是有序的,hash的实现就是这样的。

但不保证有序,并非就一定无序,你这种小量的数据,在内存分配的时候,完全可以在一块连续的内存中存放。有序很正常。但一定不能依赖map的顺序。

liangdian
liangdian · #2 · 11年之前
lovegolanglovegolang #1 回复

map 不能保证是有序的,hash的实现就是这样的。 但不保证有序,并非就一定无序,你这种小量的数据,在内存分配的时候,完全可以在一块连续的内存中存放。有序很正常。但一定不能依赖map的顺序。

嗯嗯,知道了,还有的是,无闻用的go1.0.3版本,我用的go1.1.2版本,对于map,是否有改动哦,听说是map的存储变成了二叉树,不知道是不是~

lovegolang
lovegolang · #3 · 11年之前

map实现算法是变了,据说效率更高了。但顺序这个肯定是不能依赖的。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传