ruby – 如何从给定的一组值中进行选择,舍入?
发布时间:2020-12-17 02:49:52 所属栏目:百科 来源:网络整理
导读:我有一个ruby阵列的哈希,有两个键,’tier’和’price’.对于给定的价格,我想返回该等级. 这很简单,具有完全匹配,但是如何通过将输入值四舍五入到数组中的下一个值来确保总是匹配? 例如,给定下面的数组,如果我的值为’499′,我想返回’10’. tiers = [ { tie
我有一个ruby阵列的哈希,有两个键,’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). 解决方法
您可以成对地枚举所有层,并根据该对评估您的价格.像这样的东西:
def detect_tier(price) tiers.each_cons(2) do |t1,t2| next if price < t1[:price] # too low 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |