-2

我有以下哈希(虚拟{}),其中一个成员是一个数组,我如何构建代码逻辑来:(a)评估每个键->值(b)评估每个键->值(如果它是哈希内的数组)

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

我为只有一个值的 Key 编写的代码是:

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

4

1 回答 1

1

确保一切都是 Array 允许统一处理:

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
于 2013-04-26T18:15:01.847 回答