2013-03-08 47 views
0

选择项目我有红宝石的哈希看起来像这样:从一个Ruby的Hash

{"NameValues"=>[ 
    {"Name"=>"Field 1", "Values"=>["Data 1"]}, 
    {"Name"=>"Field 2", "Values"=>["Data 2"]}, 
    {"Name"=>"Field 3", "Values"=>["Data 3"]}, 
    {"Name"=>"Field 4", "Values"=>["Data 4"]}, 
    {"Name"=>"Field 5", "Values"=>["Data 5"]} 
]} 

我想使用的名称从“名称”元素选择“值”元素的内容,例如,通过搜索“栏3”等,找到“数据3”串

+2

您可能想要查看重构生成哈希的代码。散列并不是非常有用,因为它迫使你跳过这些圈套,应该/可以简化为其中每个“名称”值实际上都是指向“值”值的键。 – 2013-03-08 17:51:16

+0

是的,我同意 - 不幸的是,这些数据超出了我的控制范围。 – user1513388 2013-03-11 08:54:20

回答

3

你可以使用Enumerable#find方法按名称查找哈希:

hash = {"NameValues"=>[ 
    {"Name"=>"Field 1", "Values"=>["Data 1"]}, 
    {"Name"=>"Field 2", "Values"=>["Data 2"]}, 
    {"Name"=>"Field 3", "Values"=>["Data 3"]}, 
    {"Name"=>"Field 4", "Values"=>["Data 4"]}, 
    {"Name"=>"Field 5", "Values"=>["Data 5"]} 
]} 

p hash['NameValues'].find{ |h| h['Name'] == 'Field 3'}['Values'] 
#=> ["Data 3"] 

find基本上迭代ŧ通过NameValues数组,直到找到匹配的元素。然后您可以从返回的元素中获取Values

+0

完美 - 工作感谢!!! – user1513388 2013-03-08 17:52:51

相关问题