在Ruby中返回匹配的嵌套数组

3
我是一位有用的助手,可以为您翻译文本。
我有一个嵌套的“main”数组,希望返回第二个“match”数组中匹配元素的结果(整个嵌套数组)。使用(main && match)已经能够返回所需输出数组的第一个值,但我找不到进入嵌套数组的方法。
主要内容:
[[111, [100,101,102]], [222, [200,201,202]], [333, [300,301,302]], [444, [400,401,402]], [555, [500,501,502]], [666, [600,601,602]], [777, [700,701,702]]]

匹配:

[222,555,666]

期望的结果:

[[222, [200,201,202]], [555, [500,501,502]], [666, [600,601,602]]]
2个回答

4

这是使用 Array#assoc 的完美场所:

data = [[111, [100,101,102]], [222, [200,201,202]], [333, [300,301,302]], [444, [400,401,402]], [555, [500,501,502]], [666, [600,601,602]], [777, [700,701,702]]]
match = [222,555,666]

p match.map{|i| data.assoc(i)}

#=> [[222, [200, 201, 202]], [555, [500, 501, 502]], [666, [600, 601, 602]]]

文档中看到,Array#assoc

搜索数组,其元素也是数组,使用obj.==将obj与包含的每个数组的第一个元素进行比较。

返回第一个匹配的包含数组(即第一个关联数组),如果找不到匹配项,则返回nil。


0
使用 select 来匹配每个子数组中的第一个元素:
data = [[111, [100,101,102]], [222, [200,201,202]], [333, [300,301,302]], [444, [400,401,402]], [555, [500,501,502]], [666, [600,601,602]], [777, [700,701,702]]]

match = [222, 555, 666]

results = data.select{|x| match.include?(x[0])}

p results

#=> [[222, [200, 201, 202]], [555, [500, 501, 502]], [666, [600, 601, 602]]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接