2016-07-27 120 views
0

我有以下代码嵌套循环。我怎样才能最小化循环?最小化嵌套循环

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

什么问题是你想解决?我有强烈的怀疑,你正在做这些循环,你应该用数据库查询来做。 –

+0

专注于澄清问题。 “我怎样才能最小化循环?”是什么意思? ?。显示你给出的例子的预期结果。注意我已经为这两个数组分配了变量。这样读者可以在回答和评论中引用这些变量而不用定义它们。 –

+0

为什么你拒绝澄清你的问题与编辑? –

回答

1

如果用户的每个子阵列有没有重复的元素,那么下面应该工作

users.each { |user| puts array & user } 
2

从我的理解,你想从usersarray的共同元素。

首先使users数组flatten使它成为一个单一的数组。然后使其成为uniq,以便一个ID不再重复。 compact将删除nil值。之后,使用array进行&操作。你有你的result

result = users.flatten.uniq.compact & array 

现在,如果你要打印的result

puts result 
+0

我认为你的意思是'&'而不是'&&'。你以这种方式返回数组的值。 &是Ruby数组的交集方法。 –

+0

@AlexandreAngelim,感谢您的注意。是的,'&'是更可取的。 –

+0

@CarySwoveland好吧,我还添加了打印部分。谢谢。 –