2017-06-15 16 views
0

私は部屋の配列:rooms_array = [room1...roomn]を持っています。それぞれの部屋はそれぞれ細部のハッシュです。各部屋のハッシュにはオファーハッシュがあります。 room1 = {...., offers=> {...},...} もう1つのオファーのハッシュがあります。 avg_array = [[{offer1},{offer2}],[{offer4},{offer3}],....] 両方のハッシュの長さが同じであるため、avg_arrayの最初の配列はroom1用、2番目はroom2用など... 私の問題は、avg_arrayの各配列をrooms_arrayの対応するオファーハッシュに追加する方法です。配列オブジェクトを配列のハッシュにマージする

私の試み:あなたは既存のアレイに追加したい場合はArray.zip

rooms.zip(avg_array).map do |room,avg| 
    room[:offers] = avg 
    room 
end 

を使って何かを行うことができるかもしれないよう

_rooms.values.map do |room| 
    if room[:offers].count > 1 
    i=0 
    room[:offers] = rooms_hash[i] 
    i = i + 1 
    end 
end 
+0

'{offer1}'は有効なRubyオブジェクトではありません。 –

答えて

3

が見える:

rooms.zip(avg_array).map do |room,avg| 
    room[:offers] ||= [] 
    room[:offers].concat avg 
    room 
end 

見ます: What's the 'Ruby way' to iterate over two arrays at once

+0

両方でidを最初に確認してから挿入することは可能ですか?両方とも、この目的のためのIDを持っていると言うことができます。 – Ravi

+0

ええ - そのループの中で、あなたは部屋のオブジェクトと平均オブジェクトの両方を調べることができます。あなたがavg [x + 1]またはavg [x-1]に直接アクセスすることはできません(あなたはあなたに直接アクセスすることはできませんxが何であるかわからない!)それは理にかなっていますか? – Fiid

+0

そうです。 select文を使用して項目を確認しました。 – Ravi

関連する問題