使用结构结果在映射中遍历数据



在我的课堂上,我根据个人的日记录构建每日流动性状态。这是以前日期的一个简单状态函数,其中:

  • daily_state(day_1(=值(day _1(
  • daily_state(day_N(=值(day _N(+daily_state(day _N-1(

下面的代码:

def build
days.each_with_index.map do |_, index|
days[index][:total_sum] += days[index - 1][:total_sum] unless index.zero?
build_single(days[index])
end
end

def build_single(day)
Liquidity::DailyRecord.new(day[:day], day[:total_sum])
end
Liquidity::DailyRecord = Struct.new(
:day,
:total_sum
)

但现在我想通过将revenues_sum添加到结构中来扩展此功能,如下所示:

Liquidity::DailyRecord = Struct.new(
:day,
:total_sum,
:revenues_sum
)

如何将地图从build方法更改为处理以下数据:

days = [
{:day=>Mon, 23 Nov 2020, :total_sum=>#<Money fractional:0 currency:EUR4>},
{:day=>Tue, 24 Nov 2020, :total_sum=>#<Money fractional:0 currency:EUR4>},
{:day=>Sun, 29 Nov 2020, :total_sum=>#<Money fractional:0 currency:EUR4>, :revenues_sum=>#<Money fractional:0 currency:EUR4>},
{:day=>Mon, 30 Nov 2020, :total_sum=>#<Money fractional:39999786000 currency:EUR4>, :revenues_sum=>#<Money fractional:40000000000 currency:EUR4>},
]

据我所知,您应该能够通过稍微更新代码来实现这一点

def build(days)
days.each_with_index.map do |_, index|
days[index][:total_sum] += days[index - 1][:total_sum] unless index.zero?
days[index][:revenues_sum] = 0 if days[index][:revenues_sum].nil?
days[index][:revenues_sum] += days[index - 1][:revenues_sum] unless index.zero?
build_single(days[index])
end
end
def build_single(day)
Liquidity::DailyRecord.new(day[:day], day[:total_sum], day[:revenues_sum])
end

最新更新