如何将几个值添加到同一个密钥?这样的事情:如何将多个值添加到相同的密钥
x = {}
x["k1"] = nil
x["k1"] << {"a" => "a"}
x["k1"] << {"b" => "b"}
好吧,这不工作像数组。
如何将几个值添加到同一个密钥?这样的事情:如何将多个值添加到相同的密钥
x = {}
x["k1"] = nil
x["k1"] << {"a" => "a"}
x["k1"] << {"b" => "b"}
好吧,这不工作像数组。
您可以如下操作:
对于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}}
推荐此代码,更简单'h ['k1'] <<'a'<<'b'' –
取决于你在这里完成的任务。如果你想要一个数组哈希表,这是很容易:
x = {}
x['k1'] = Array.new
x['k1'] << 'a'
x['k1'] << 'b'
,或者如果你想嵌套的哈希值,很简单也
x = {}
x['k1'] = {}
x['k1']['a'] = 'a'
x['k1']['b'] = 'b'
在哈希值都只是对象。它们可以是数组,其他哈希,或其他任何你可能想要的。
所以,你希望key'k1'的值是一个散列,并且你希望将key/value对添加到那个散列。你可以这样说:
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}
简短的回答是,你不能:散列关键字只有一个定义值。 另外,您正尝试使用铲运算符<<
(一种数组方法)来设置值。但是,即使你使用=
,每次你设置键为新值时,旧值丢失:
x = {}
=> {}
x["k1"] = {"a" => "a"}
=> {"a"=>"a"}
x["k1"] = {"b" => "b"}
=> {"b"=>"b"}
正如其他人所指出的那样,如果你想每个键“几个值”,你应该使用某种集合
x = {}
=> {}
x["k1"] = {"a" => "a", "b" => "b"}
=> {"a"=>"a", "b"=>"b"}
你的问题没有意义。你真的需要修复它。你的意思是'x [“k1”] = {}'或'= []'?无论如何,以下两条陈述令人费解。包含一个小例子通常很有帮助,可以显示给定输入的输出结果。如果你这样做,我们可以帮助你正确地陈述问题(这将对你有教育意义)。 –
如果您将多值键值对视为仅仅是一组键 - 值对的键,那么您可以想象如何实现您寻找的典型现代映射类型散列符号。代替'{:key => value1,value2}',请考虑'{:key => [{:subkey_1 => value_1},{:subkey_2 => value_2}]} - 这就是您可以在Ruby中执行的操作,至少。 –