2016-07-27 104 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好吧,我還添加了打印部分。謝謝。 –