如何在同一个键中添加多个值?像这样:
x = {}
x["k1"] = nil
x["k1"] << {"a" => "a"}
x["k1"] << {"b" => "b"}
嗯,这与数组不一样。
答案 0 :(得分:15)
您可以执行以下操作:
Array
作为Hash
的键的值:
h = Hash.new{|hsh,key| hsh[key] = [] }
h['k1'].push 'a'
h['k1'].push 'b'
p h # >> {"k1"=>["a", "b"]}
Hash
作为Hash
的键的值:
h = Hash.new{|hsh,key| hsh[key] = {} }
h['k1'].store 'a',1
h['k1'].store 'b',1
p h # >> {"k1"=>{"a"=>1, "b"=>1}}
答案 1 :(得分:6)
取决于你在这里想要完成的事情。如果你想要一个数组哈希,这很容易:
x = {}
x['k1'] = Array.new
x['k1'] << 'a'
x['k1'] << 'b'
或者如果你想要嵌套的哈希,也很简单
x = {}
x['k1'] = {}
x['k1']['a'] = 'a'
x['k1']['b'] = 'b'
散列中的值只是对象。它们可以是数组,其他哈希,或者您可能想要的任何其他内容。
答案 2 :(得分:3)
因此,您希望键'k1'的值是一个哈希值,并且您希望将键/值对添加到该哈希值。你可以这样做:
2.0.0-p195 :111 > x = {}
=> {}
2.0.0-p195 :112 > x['k1'] = { 'a' => '1' }
=> {"a"=>"1"}
2.0.0-p195 :117 > x['k1'].merge!({ 'b' => '2' })
=> {"a"=>"1", "b"=>"2"}
或者,您可以这样做:
2.0.0-p195 :119 > x['k1']['c'] = 3
=> 3
2.0.0-p195 :120 > x['k1']
=> {"a"=>"1", "b"=>"2", "c"=>3}
答案 3 :(得分:0)
简短的回答是你不能:根据定义,哈希键只有一个值。
此外,您正在尝试使用铲运算符<<
(数组方法)来设置值。但即使您使用=
,每次将密钥设置为新值时,旧值都会丢失:
x = {}
=> {}
x["k1"] = {"a" => "a"}
=> {"a"=>"a"}
x["k1"] = {"b" => "b"}
=> {"b"=>"b"}
正如其他人所指出的那样,如果你想要每个键“多个值”,你应该使用某种集合
x = {}
=> {}
x["k1"] = {"a" => "a", "b" => "b"}
=> {"a"=>"a", "b"=>"b"}