![](/img/trans.png)
[英]Ruby - how to find out if a number is within a range with given percentage tolerance?
[英]Is there a way to find out where a number lies in a range in ruby?
假設我有一個min
和max
。 max
可以是任何值,但min
始終大於零。
我可以得到范圍min..max
,假設我有第三個數字, count
-我想將范圍除以10(或其他一些數字)以獲得新的比例。 因此,如果范圍是1000
,它將根據我的新標度以100、200、300的值遞增,並找出計數在該范圍內的位置。 因此,如果count
是235,則它將返回2
因為這是它在范圍刻度上的位置。
我說得通嗎 我正在嘗試根據值的范圍創建一個熱圖,基本上...因此,我需要根據該范圍來創建比例,並找出我要測試的值在該新比例上的位置。
我正在處理類似這樣的事情,但是沒有做到:
def heat_map(project, word_count, division)
unless word_count == 0
max = project.words.maximum('quantity')
min = project.words.minimum('quantity')
range = min..max
total = range.count
break_point = total / division
heat_index = total.to_f / word_count.to_f
heat_index.round
else
"freezing"
end
end
我發現可能缺少一種更簡單的紅寶石方式。
我只是在快速地集思廣益,但是這樣的幫助嗎?
>> (1..100).each_slice(10).to_a.index { |subrange| subrange.include? 34 }
=> 3
>> (1..100).each_slice(5).to_a.index { |subrange| subrange.include? 34 }
=> 6
這告訴您值( subrange.include?
的參數)位於哪個子范圍(子范圍的大小由each_slice
的參數確定)中。
>> (1..1000).each_slice(100).to_a.index { |subrange| subrange.include? 235 }
=> 2
請注意,子范圍的索引從0開始,因此您可能需要根據需要向其添加1。 同樣,這還沒有准備好,但是應該很容易用方法包裝。
為什么不僅僅使用算術和舍入? 假設該number
介於min
和max
之間,並且您希望將范圍划分為n_div
分區,並且x
是您要查找其索引的數字(根據上面的數字,它看起來像min = 0
, max
= 1000, n_div = 10
和x = 235
):
def heat_index(x, min, max, n_div)
break_point = (max - min).to_f/n_div.to_f
heat_index = (((x - min).to_f)/break_point).to_i
end
然后heat_index(235, 0, 1000, 10)
給出2。
這個怎么樣? 它生成一個范圍邊界數組,然后檢查數字是否位於它們之間。
def find_range(min, max, query, increment)
values = []
(min..max).step(increment) { |value| values << value }
values.each_with_index do |value, index|
break if values[index + 1].nil?
if query > value && query < values[index + 1]
return index
end
end
end
編輯 :刪除冗余變量
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.