簡體   English   中英

有沒有辦法找出數字在紅寶石范圍內的位置?

[英]Is there a way to find out where a number lies in a range in 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

我發現可能缺少一種更簡單的紅寶石方式。

我只是在快速地集思廣益,但是這樣的幫助嗎?

>> (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介於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。

這個怎么樣? 它生成一個范圍邊界數組,然后檢查數字是否位於它們之間。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM