【发布时间】:2018-01-26 02:11:00
【问题描述】:
我有一个带有两个键“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)。
【问题讨论】: