让我们说我有两个关系数组,用户每天买卖。
如何使用.each
迭代它们并且仍然让较长的数组在较短的数组耗尽后独立运行。下面我想找出某人每日购买和销售的比例。但是不能得到这个比例,因为它总是1,因为我对较短阵列的每个项目迭代一次较长的数组。
users = User.all
ratios = Hash.new
users.each do |user|
if user.buys.count > 0 && user.sells.count > 0
ratios[user.name] = Hash.new
buy_array = []
sell_array = []
date = ""
daily_buy = user.buys.group_by(&:created_at)
daily_sell = user.sells.group_by(&:created_at)
daily_buy.each do |buy|
daily_sell.each do |sell|
if buy[0].to_date == sell[0].to_date
date = buy[0].to_date
buy_array << buy[1]
sell_array << sell[1]
end
end
end
ratio_hash[user.name][date] = (buy_array.length.round(2)/sell_array.length)
end
end
谢谢!
答案 0 :(得分:0)
您可以通过执行以下操作来连接两个数组并删除重复的元素:
(a_array + b_array).uniq.each do |num|
# code goes here
end
答案 1 :(得分:0)
daily_buy = user.buys.group_by(&:created_at)
daily_sell = user.sells.group_by(&:created_at
buys_and_sells = daily_buy + daily_sell
totals = buys_and_sells.inject({}) do |hsh, transaction|
hsh['buys'] ||= 0;
hsh['sells'] ||= 0;
hsh['buys'] += 1 if transaction.is_a?(Buy)
hsh['sells'] += 1 if transaction.is_a?(Sell)
hsh
end
hsh['buys']/hsh['sells']
我认为以上可能会这样做...而不是将每个东西收集到单独的数组中,将它们连接在一起,然后遍历组合数组中的每个项目,增加由返回的哈希的相应键中的计数。注入。
答案 2 :(得分:-1)
在这种情况下,您不能在每次循环使用时循环它们 这段代码会给你一个提示
ar = [1,2,3,4,5]
br = [1,2,3]
array_l = (ar.length > br.length) ? ar.length : br.length
for i in 0..array_l
if ar[i] and br[i]
puts ar[i].to_s + " " + br[i].to_s
elsif ar[i]
puts ar[i].to_s
elsif br[i]
puts br[i].to_s
end
end