热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何从给定的一组值中进行选择,四舍五入?

如何解决《如何从给定的一组值中进行选择,四舍五入?》经验,为你挑选了1个好方法。

我有一个红宝石阵列的哈希,有两个键,'tier'和'price'.对于给定的价格,我想返回该等级.

这很简单,具有完全匹配,但是如何通过将输入值四舍五入到数组中的下一个值来确保总是匹配?

例如,给定下面的数组,如果我的值为'499',我想返回'10'.

tiers = [
    { tier: 0, price: 0 },
    { tier: 1, price: 50 },
    { tier: 2, price: 100 },
    { tier: 3, price: 150 },
    { tier: 4, price: 200 },
    { tier: 5, price: 250 },
    { tier: 6, price: 300 },
    { tier: 7, price: 350 },
    { tier: 8, price: 400 },
    { tier: 9, price: 450 },
    { tier: 10, price: 500 },
    { tier: 11, price: 550 },
    { tier: 12, price: 600 },
    { tier: 13, price: 650 },
    { tier: 14, price: 700 },
    { tier: 15, price: 750 },
    { tier: 16, price: 800 },
    { tier: 17, price: 850 },
    { tier: 18, price: 880 },
    { tier: 19, price: 950 },
    { tier: 20, price: 1000 }
]

我可以得到完全匹配tiers.detect { |tier| tier[:price] == "500"}[:tier],但如果我没有匹配,这将返回错误.我可以增加我的输入值,直到我返回一个匹配但这看起来非常低效.

我考虑过舍入我的输入值,但你会注意到增量并不总是相同的(从第17层到第18层,价格只增加30).



1> Sergio Tulen..:

您可以成对地枚举所有层,并根据该对评估您的价格.像这样的东西:

def detect_tier(price)
  tiers.each_cons(2) do |t1, t2|
    next if price  t2[:price] # too high

    return t1[:tier] if price == t1[:price] # matches tier price exactly
    return t2[:tier] # "round up"
  end
end

detect_tier(10) # => 1
detect_tier(100) # => 2
detect_tier(499) # => 10


推荐阅读
author-avatar
烟台中海地产有限公司往
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有