我有以下嵌套循环的代码。如何最小化循环?
users
结果如下:
users = [[35, 61, 62, 63, 64, 65, 66, 67, 68, 69, nil, 70, 71, 72, 73,
74, 75, 78, 79, 92, 94, 95, 154, 164, 292, 293, 294, 295, 314],
[],
[35],
[],
[35, 79, 88],
[],
[],
[36, 35, 56, 78, 87, 95, 65],
[63, 72, 78, 80, 81, 82, 84, 87, 90, 93, nil, 96, 111, 157, 159, 160, 271,
272, 66, 295, 296, 297, 298, 299, 300, 301, 305, 307, 308, 71, 315],
[],
[79, 83, 85, 86, 89, 91, 161, 162, 163, 67, 294, 302, 303, 304, 306,
309, 310, 311, 312, 313],
[],
[314],
[314],
[]
]
这就是我需要在每个元素中循环对象的原因。
array
值为:
array = [309, 310, 305, 304, 90, 162, 78, 297, 296, 272, 271, 84, 91, 308,
299, 79, 87, 298, 301, 163, 81, 72, 83, 111, 86, 313, 164, 300, 159,
315, 160, 307, 82, 69, 312, 89
]
谢谢!
0.upto(users.count).each do |i|
users[i].each do |user_id|
if array.include?(user_id)
puts user_id
end
end
end
答案 0 :(得分:2)
根据我的理解,您希望从users
和array
获取共同元素。
首先使users
数组flatten
成为单个数组。然后将其设为uniq
,以便一个id不会再次重复。 compact
将删除nil
值。之后,使用&
进行array
操作。你得到了result
。
result = users.flatten.uniq.compact & array
现在,如果您要打印result
puts result
答案 1 :(得分:1)
如果每个用户子数组都没有重复元素,那么以下内容应该可以正常工作
users.each { |user| puts array & user }