在Ruby中将Array转换为Hash

时间:2014-04-24 17:01:19

标签: ruby arrays hash

我有这个:

balance = ["Date", "2014-03-17", "The voice", 1, "Date", "2014-03-18", "Argo", 1, "Date", "2014-03-19", "The voice", 0]    

当我使用时:

Hash[*balance]   

它给了我:

{"Date"=>"2014-03-19", "The voice"=>0, "Argo"=>1}    

而不是:

   {"Date"=>"2014-03-17", "The voice"=>1, "Date"=>"2014-03-18", "Argo"=>1, "Date"=>"2014-03-19", "The voice"=>0}    

为什么呢? (对不起,如果很明显的话。)

4 个答案:

答案 0 :(得分:2)

根据Hash documentation

  

Hash是一个类似字典的唯一键及其集合   值。

有多个Date s,The voice s。

{'key' => 'value1', 'key' => 'value2'}
# => {"key"=>"value2"}

如何使用哈希数组?

[{'key' => 'value1'}, {'key' => 'value2'}]

答案 1 :(得分:1)

是的,因为您的阵列中"The voice""Date"多次发生 ,而哈希保留了其任意密钥的最新更新值。根据您的数组最后一个条目.."Date", "2014-03-19", "The voice", 0],您的哈希值会保留密钥"date""The voice"的最新值。

您正在寻找的是不可能的,但您可以获得[["Date", "2014-03-17"], ["The voice", 1],..]

答案 2 :(得分:0)

正如其他人所指出的那样,你所要求的数据结构不能作为Ruby中的Hash存在,因为它有重复的键。可能对您有用的一种可能性是生成哈希数组:

balance = ["Date", "2014-03-17", "The voice", 1,
           "Date", "2014-03-18", "Argo", 1,
           "Date", "2014-03-19", "The voice", 0]

balance.each_slice(4).collect {|h| Hash[*h]}
# => [{"Date"=>"2014-03-17", "The voice"=>1},
#     {"Date"=>"2014-03-18", "Argo"=>1},
#     {"Date"=>"2014-03-19", "The voice"=>0}]

答案 3 :(得分:0)

Myarray=['a','b','c'] #Array initialize

hash={} #Hash initialize

#Access Array Element by index using each loop and put it in hash.

Myarray.each do |i|
 hash[Myarray.index(i)+1] = i.to_s
end

print hash 

Output:{1=>"a", 2=>"b", 3=>"c"}