我是初学者,正在寻找迭代包含散列值的哈希的方法。例如。我只想打印名为“label”的键的内部哈希元素的所有值的列表。我的阵列看起来像这样:
ary = Hash.new
ary[:item_1] = Hash[ :label => "label_1" ]
ary[:item_2] = Hash[ :label => "label_2" ]
ary[:item_3] = Hash[ :label => "label_3" ]
现在我想迭代外部哈希的所有元素并试试这个:
ary.keys.each { |item| puts ary[:item] }
或者这个:
ary.keys.each { |item[:label]| puts ary[:item] }
不幸的是两个都不起作用。但如果我尝试这种 - 相当疯狂的感觉 - 绕道而行,我得到了结果,这是我想要的:
ary.keys.each { |item|
evalstr = "ary[:" + item.to_s + "][:label]"
puts eval(evalstr)
}
这产生了结果:
label_1
label_2
label_3
我绝对相信必须有更好的方法,但我不知道如何找到这种方法。
非常感谢您的提示!
答案 0 :(得分:3)
您可以使用each_value
遍历哈希的所有值;或者,您可以使用each
遍历散列的所有键/值对,这将产生两个变量,键和值。
如果要为外部哈希的每个哈希值打印单个值,您应该选择以下内容:
ary.each_value { |x| puts x[:label] }
这是一个更复杂的示例,显示了each
的工作原理:
ary.each { |key, value| puts "the value for :label for #{key} is #{value[:label]}" }
答案 1 :(得分:0)
ary = Hash.new
ary[:item_1] = Hash[ :label => "label_1" ]
ary[:item_2] = Hash[ :label => "label_2" ]
ary[:item_3] = Hash[ :label => "label_3" ]
ary.flat_map{|_,v| v.values}
#=>["label_1", "label_2", "label_3"]
答案 2 :(得分:0)
> ary = Hash.new
> ary[:item_1] = Hash[ :label => "label_1" ]
> ary[:item_2] = Hash[ :label => "label_2" ]
> ary[:item_3] = Hash[ :label => "label_3" ]
> ary.values.each {|v| puts v[:label]}
label_1
label_2
label_3