arrays - 根据阈值对整数应用不同的乘数

标签 arrays ruby hash

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

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

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

运营商可以有多种资费,最后一种资费始终没有阈值。

因此,在上面的示例中,前 150 分钟将按每分钟 15.5 便士计费,接下来的 100 分钟将按每分钟 12.3 便士计费,所有后续分钟将按每分钟 8 便士计费。

因此如果:

AnnualUsage = 1000

总成本为 95.55。

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

请帮忙!

最佳答案

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

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 .

关于arrays - 根据阈值对整数应用不同的乘数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60019563/

相关文章:

javascript - 如何在数组中声明多个具有不同上下文(ctx)的CANVAS?

ruby - net-ldap 创建带密码的用户

jquery - 如何在 Rails 中重新排序表格数据,以便最新数据显示在顶部?

c++ - g++ 链接器错误:获取 std::hash 的 undefined reference 错误

arrays - 如何遍历哈希数组中的哈希数组

ruby - 比较哈希数组并打印预期结果和实际结果

c++ - 在 C++ 中,我的控制台游戏角色在游戏字段数组内向右移动时不会停止

PHP 将字符串键分解为具有值的多维数组

php - 我可以将数组绑定(bind)到 PDO 查询中的 IN() 条件吗?

ruby-on-rails - 使用 ActionMailer 发送电子邮件注册确认