如何评估作为列表的哈希内的成员

时间:2013-04-26 17:41:57

标签: ruby cucumber

我有以下Hash(dummy {}),其中一个成员是一个数组,如何构建代码逻辑: (a)评估每个密钥 - >值 (b)评估每个密钥 - > values(s)(如果它是Hash中的数组)

dummy  = { :a1 => "xyz",
           :b1 => ["xyz1", "ayz2", "xyz3", "xyz4"] }

我只有一个值的密钥代码是:

eval(dummy)[a1.to_sym]

我需要一种干净的方法来评估在数组中有多个值的哈希成员。

这是IRB输出:

1.9.3-p327 :002 > dummy  = { :a1 => "xyz",
1.9.3-p327 :003 >                :b1 => ["xyz1", "ayz2", "xyz3", "xyz4"] }
=> {:a1=>"xyz", :b1=>["xyz1", "ayz2", "xyz3", "xyz4"]}

现在我可以访问成员及其键值对(以非常简单的方式如下:)

1.9.3-p327 :005 > pp dummy[:a1.to_sym]
"xyz"
=> "xyz"
1.9.3-p327 :006 > pp dummy[:b1.to_sym][0]
"xyz1"
=> "xyz1"
1.9.3-p327 :007 > pp dummy[:b1.to_sym][1]
"ayz2"
=> "ayz2"
1.9.3-p327 :008 > pp dummy[:b1.to_sym][2]
"xyz3"
=> "xyz3"
1.9.3-p327 :009 > pp dummy[:b1.to_sym][3]
"xyz4"
=> "xyz4"

现在,我需要一个“通用”ruby代码来处理上述情况以访问成员及其值 - 注意:例如,我只选择了1和4个值,但实际上我需要的是值范围从1000 - 5000

1 个答案:

答案 0 :(得分:1)

确保所有内容都是数组允许统一处理:

dummy  = { :a1 => "xyz",
           :b1 => ["xyz1", "ayz2", "xyz3", "xyz4"] }

dummy.each do |k, v|
  Array(v).each do |element| #Array(v) puts v in an Array, unless it already is an array.
    puts element
  end
  puts
end