假设我有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
我认为我可能更容易找到一种红宝石。
答案 0 :(得分:4)
答案 1 :(得分:4)
为什么不使用算术和舍入?假设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。
答案 2 :(得分:1)
这是怎么回事?它生成一系列范围边界,然后检查数字是否位于它们之间。
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
编辑:删除了冗余变量