从数组数组的散列中选择命名数组

时间:2018-02-14 21:09:19

标签: ruby

我有一个数组数组的哈希值。数组由哈希索引(这是我读这个的方式):

[
 {"name":"G18","data": [["X301",141],["x7901",57],["x2100",142],["x90",58]]},
 {"name":"G19","data": [["M16",141],["M203",57],["M29S",142]]},
 {"name":"G20","data": [["X301",141],["x7901",57],["x2100",142],["x90",58]]}
]

我想选择包含数组G18的哈希值,并仅返回数据。

我试着寻找答案,但我还没有找到这样的东西。

3 个答案:

答案 0 :(得分:2)

假设:

ary = [
  {"name":"G18","data": [["X301",141],["x7901",57],["x2100",142],["x90",58]]},
  {"name":"G19","data": [["M16",141],["M203",57],["M29S",142]]},
  {"name":"G20","data": [["X301",141],["x7901",57],["x2100",142],["x90",58]]}
]

尝试:

ary.select{|hsh| hsh[:name] == 'G18'}.first[:data]
 => [["X301", 141], ["x7901", 57], ["x2100", 142], ["x90", 58]] 

事实上,marmeladze的回答是正确的:

ary.find{|hsh| hsh[:name] == 'G18'}[:data]

使用select是一次失败。

答案 1 :(得分:2)

如果您只有一个名称为" G18"

的项目,这将对您有用
a.find {|e| e[:name] == "G18" }[:data]

请参阅官方文档中的Enumerable#find

答案 2 :(得分:2)

collection = [
  {"name":"G18","data": [["X301",141],["x7901",57],["x2100",142],["x90",58]]},
  {"name":"G19","data": [["M16",141],["M203",57],["M29S",142]]},
  {"name":"G20","data": [["X301",141],["x7901",57],["x2100",142],["x90",58]]}
]

def data_for_name(name, collection)
  collection.find { |item| item[:name] == name }[:data]
end

p data_for_name("G18", collection)