我有这个:
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}
为什么呢? (对不起,如果很明显的话。)
答案 0 :(得分:2)
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"}