【问题标题】:Merging Array objects into hash with an array将 Array 对象合并到带有数组的散列中
【发布时间】:2017-11-18 09:58:57
【问题描述】:

我有一系列房间:rooms_array = [room1...roomn],每个房间都是一个带有各自详细信息的哈希。每个房间散列都有一个优惠散列。 room1 = {...., offers=> {...},...} 现在我有另一个提供哈希值的数组。 avg_array = [[{offer1},{offer2}],[{offer4},{offer3}],....] 两个哈希的长度相同,因此 avg_array 的第一个数组用于 room1,第二个用于 room2,依此类推... 我的问题是如何将 avg_array 的每个数组添加到 rooms_array 的相应 offer 哈希中。

我的尝试:

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

【问题讨论】:

  • {offer1} 不是有效的 Ruby 对象。

标签: ruby-on-rails arrays ruby hash


【解决方案1】:

看起来你可以使用Array.zip做某事

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

如果要追加到现有数组:

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

【讨论】:

  • 是否可以先在两者中检查 id 然后插入。假设两者都有一个用于此目的的 id。
  • 是的 - 在该循环中,您可以检查房间和平均对象并对它们做任何事情。 zip 意味着它们将始终保持同步,因此您只会看到 room[5] 和 avg[5]...您不能直接访问 avg[x+1] 或 avg[x-1](您不知道 x 是什么!)这有意义吗?
  • 是的。我使用了一个 select 语句来检查该项目。
猜你喜欢
  • 2019-12-20
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 2015-02-03
  • 2019-05-14
相关资源
最近更新 更多