首页 > 解决方案 > 根据阈值将不同的乘数应用于整数

问题描述

我必须构建一个程序来计算电话提供商使用的年度分钟成本,它取决于不同的费率。

例如,一个电话运营商可能有以下费率:

  "rates":           [
      {"price": 15.5, "threshold": 150},
      {"price": 12.3, "threshold": 100},
      {"price": 8}
    ],

运营商可以有多个资费,最后一个资费始终没有门槛。

所以在上面的例子中,前 150 分钟按每分钟 15.5 便士收费,接下来的 100 分钟按每分钟 12.3 便士收费,随后的所有分钟按 8 便士收费。

因此,如果:

AnnualUsage = 1000

总成本为 95.55。

我正在努力想象一种方法,该方法可以适应运营商可能拥有的多种关税,并根据阈值将一个值乘以不同的价格。

请帮忙!

标签: arraysrubyhash

解决方案


只是另一种选择,我认为这是不言自明的:

rates =  [
      {price: 15.5, threshold: 150},
      {price: 12.3, threshold: 100},
      {price: 8}
    ]

annual_usage = 1000

res = rates.each_with_object([]) do |h, ary|
  if h.has_key?(:threshold) && annual_usage > h[:threshold]
    annual_usage -= h[:threshold]
    ary << h[:threshold] * h[:price]/100
  else
    ary << annual_usage * h[:price]/100
  end
end

res #=> [23.25, 12.3, 60]
res.sum #=> 95.55

看看Enumerable#each_with_object


推荐阅读