2016-03-06 84 views
0

我需要将哈希的密钥名称更改为数字名称。例如。将哈希中的所有密钥名称更改为数字名称(0,1,2,3 ...)

hash = {"0"=>["val", "val"], "1"=>["val"], "6"=>["val", "val"], "7"=>["val"]} 

hash = {"0"=>["val", "val"], "1"=>["val"], "2"=>["val", "val"], "3"=>["val"]} 

编号将从零开始,并继续下去,直到散列结束。散列长度将是随机的。

回答

4
new_hash = hash.values.map.with_index { |value, idx| [idx.to_s, value] }.to_h 
#=> {"0"=>["val", "val"], "1"=>["val"], "2"=>["val", "val"], "3"=>["val"]} 
-1
key = -1 

Hash[hash.map { |_,v| [(key = key.next).to_s, v] }] 

hash.map { |_,v| [(key = key.next).to_s, v] }.to_h