简化版:
ar=['name: Joe', 'name: Jack', 'name: Jill']
hash={}
ar.each{|line| if line.include?('name'); hash['name'] = line;end;}
puts hash
我的目标是将数组中的所有元素添加到' name' -key中,但我的代码似乎覆盖了现有的值。
是否可以将多个值分配给一个单独的键?我宁愿不使用数组作为值。
我意识到我的第一个例子确实涵盖了整个问题:
将数组扩展为: ar = ['名称:Joe','名称:Jack','名称:Jill',年龄:29'年龄:32& #39;,' misc:天气很好']
我的目的是将名称分组在名称'等等下面。
事先不知道属性/键的数量,因此数组将以动态方式生成。
答案 0 :(得分:3)
除了使用数组作为值之外别无选择。否则你将如何检索多个值?无论如何,你需要某种可枚举,所以使用数组没有问题。
尝试这样的事情:
hash = {}
ar = ['name: Joe', 'name: Jack', 'name: Jill']
hash['name'] = ar.select {|l| l.include? 'name'}.collect {|l| l.split.last}
hash # => {"name"=>["Joe", "Jack", "Jill"]}
或者,更简单一点:
hash = {"name" => ar.select {|l| l.include? 'name'}.collect {|l| l.split.last} }
对于您编辑过的问题:
hash = Hash.new {|h,k| h[k] = [] }
ar.each {|l| k,v = l.split(": "); hash[k] << v }
hash # => {"name"=>["Joe", "Jack", "Jill"], "foo"=>["bar"]}