添加项目到哈希出乎意料?

时间:2014-01-08 19:47:05

标签: ruby sorting hash

编辑:我的错!!!问题解决了(我在ruby 1.8上测试了这个,在ruby 1.9上按预期工作)

我有一个现有的哈希,并希望对它进行排序,以便所有键都按数字顺序排列。

a = {4 => 5, 8 => 20, 3 => 2, 6 => 1, 7 => 10, 2 => 1 }
=> #Wanted Newhash = {2 => 1, 3 => 2, 4 => 5, 6 => 1, 7 => 10, 8 => 20 }

这是我做的:

b = a.keys.sort => [2,3,4,6,7,8]
c ={}

for key in b
    p key
    c[key] = a[key]
    p c
end

这是输出:

2
{2=>1}
3
{2=>1, 3=>2}
4
{2=>1, 3=>2, 4=>5}
6
{6=>1, 2=>1, 3=>2, 4=>5}
7
{6=>1, 7=>10, 2=>1, 3=>2, 4=>5}
8
{6=>1, 7=>10, 2=>1, 8=>20, 3=>2, 4=>5}

我不明白的是:

我在b中排序的密钥是我想要的。我想如果我将它添加到一个新的哈希,它将被添加到哈希的末尾,但这不是这里的情况。怎么会这样?密钥6及其值已在前面添加,密钥7在此之后添加,然后密钥8及其值插入密钥2和{之间{1}}。任何解释?

1 个答案:

答案 0 :(得分:3)

可能你正在使用Ruby< 1.9。这就是你没有得到你想要的订单的原因。