【发布时间】:2016-04-25 16:27:28
【问题描述】:
假设我有两个用户日常买卖的关系数组。
我如何使用.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
谢谢!
【问题讨论】:
-
我不明白你的问题。读者不必试图从代码中推断问题,尤其是从不起作用的代码中。考虑一下如何在不提供任何代码的情况下清楚地陈述问题。通常一个例子会有所帮助。当您给出示例时,为每个输入对象分配一个变量(例如,
arr = [1,2,3])并显示该输入所需的输出。包含变量的原因是为了让读者可以在 cmets 和解决方案中剪切和粘贴并引用它们,而无需定义它们。 -
另外,避免询问如何采用特定方法(例如,“我如何使用
each遍历它们?”),这样您就不会关闭其他方法,可能更好的方法。只需解释您想要实现的目标。我建议您编辑您的问题以至少添加一个示例。如果您这样做,请留下您所拥有的并将其添加到最后,表明它是一个编辑(例如“编辑:....”)。 -
一个 XY 问题 ...meta.stackexchange.com/questions/66377/what-is-the-xy-problem 您当前有 3 个嵌套循环(购买、销售和用户)。处理
nusers/buys/sells 需要 n^3 次操作。一旦 3 个输入中的任何一个超过一个微不足道的数字,这将变得非常缓慢。你说你想要“每日买入和卖出的比率”,但只保留有买入和卖出的日期会丢弃大量数据,否则比率为 0 或未定义,无论哪个日期都没有买入/卖出。您是否想要他们购买或出售日期的趋势?这是一个不同的问题。
标签: ruby-on-rails arrays ruby loops nested-loops