有没有办法找出一个数字在红宝石范围内的位置?

时间:2011-09-07 13:40:32

标签: ruby

假设我有minmax个号码。 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

我认为我可能更容易找到一种红宝石。

3 个答案:

答案 0 :(得分:4)

答案 1 :(得分:4)

为什么不使用算术和舍入?假设number介于minmax之间,并且您希望将范围拆分为n_div个分区,x是要查找索引的数字({根据上文,它看起来像min = 0max = 1000,n_div = 10x = 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

编辑:删除了冗余变量