Ruby 如何向同一个键添加多个值

Ruby 如何向同一个键添加多个值,ruby,Ruby,如何向同一个键添加多个值?大概是这样的: x = {} x["k1"] = nil x["k1"] << {"a" => "a"} x["k1"] << {"b" => "b"} 2.0.0-p195 :111 > x = {} => {} 2.0.0-p195 :112 > x['k1'] = { 'a' => '1' } => {"a"=>"1"} 2.0.0-p195 :117 > x['k1'].m

如何向同一个键添加多个值?大概是这样的:

x = {}
x["k1"] =  nil
x["k1"] << {"a" => "a"}
x["k1"] << {"b" => "b"}
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”]=零
x[“k1”]“a”}
x[“k1”]“b”}

嗯,这和数组不一样

这取决于你在这里想要完成什么。如果需要数组散列,这很简单:

x = {}
x['k1'] = Array.new
x['k1'] << 'a'
x['k1'] << 'b'

散列中的值只是对象。它们可以是数组、其他散列或任何您可能需要的内容。

因此,您希望键“k1”的值是散列,并希望将键/值对添加到该散列中。您可以这样做:

x = {}
x["k1"] =  nil
x["k1"] << {"a" => "a"}
x["k1"] << {"b" => "b"}
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"] =  nil
x["k1"] << {"a" => "a"}
x["k1"] << {"b" => "b"}
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} 
您可以执行以下操作:

对于
数组
作为
散列的键的值

h = Hash.new{|hsh,key| hsh[key] = [] }
h['k1'].push 'a'
h['k1'].push 'b'
p h # >> {"k1"=>["a", "b"]}
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 = Hash.new{|hsh,key| hsh[key] = [] }
h['k1'].push 'a'
h['k1'].push 'b'
p h # >> {"k1"=>["a", "b"]}
h = Hash.new{|hsh,key| hsh[key] = {} }
h['k1'].store 'a',1
h['k1'].store 'b',1
p h # >> {"k1"=>{"a"=>1, "b"=>1}}

简而言之,你不能这样做:一个散列键根据定义只有一个值。
此外,您正在尝试对该代码使用spoot操作符
recoend,它更简单
h['k1'],如果您认为多值键值对只不过是一组键值对的一个键,那么您可以想象如何实现针对典型现代散列表示法的映射。与
{:key=>value1,value2}
相反,想想
{:key=>[{:subkey\u 1=>value\u 1},{:subkey\u 2=>value\u 2}]}
——至少在Ruby中可以这样做。