返回Ruby中匹配的嵌套数组

时间:2013-11-15 02:50:23

标签: ruby arrays multidimensional-array

我有一个嵌套的“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 个答案:

答案 0 :(得分: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]]]

来自docsArray#assoc

  

搜索一个数组,其元素也是比较obj的数组   使用obj。==。

包含每个包含数组的第一个元素      

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

答案 1 :(得分: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]]]