我有一个嵌套的“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]]]
答案 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]]]
来自docs,Array#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]]]