2016-07-27 5 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

質問を明確にすることに集中。 「どのようにループを最小限に抑えることができますか?」とはどういう意味ですか? ?あなたが与えた例の期待される結果を示してください。注意変数を2つの配列に割り当てました。そうすることで、読者は答えやコメントの中のそれらの変数を、それらを定義することなく参照することができます。 –

+0

なぜあなたの質問を編集で明確にすることを拒否しますか? –

答えて

1

、その後、次のことが私の理解から

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

を動作するはずです、あなたはusersarrayから共通の要素を取得したいです。

最初にusersアレイflattenを1つの配列にします。次に、それをuniqにして、1つのIDが再び繰り返されないようにします。 compactnilの値を削除します。その後、array&の操作を行います。そしてあなたはresultを手に入れました。

result = users.flatten.uniq.compact & array 

は、今あなたが解決しようとしているresult

puts result 
+0

あなたは '&&'の代わりに '&'を意味すると思います。そのように配列の値を返しています。 &はRuby配列の交差メソッドです。 –

+0

@AlexandreAngelim、気づいてくれてありがとう。はい、 '&'がより好ましいです。 –

+0

@CarySwoveland Okプリント部分も追加しました。ありがとう。 –

関連する問題