gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:26:38 29 4
gpt4 key购买 nike

我有一个 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

关于ruby - 我如何从一组给定的值中进行选择,四舍五入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45738873/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com