Ruby量化一个范围
Ruby quantify a range
我有一个 Ruby 数组,它定义了一组整数阈值
thresholds = [under_threshold_1, under_threshold_2, ..., under_threshold_n, over_threshold]
我想将任何整数映射到对应于阈值数字的值。基本上
if threshold_a < number < threshold_b
return threshold_a
end
在 Ruby 中有没有很酷的方法来做到这一点?我需要处理 "edge" 个案例 < threshold_1
和 > threshold_over
。我只能想出一组(丑陋但有效的)if 语句或在数组上循环。
我实际上可以自由地按照我想要的方式对其进行建模(如果更方便,我可以将数组更改为其他内容)
我在想也许有一种很酷的方法可以在 case/when 子句中标出阈值
case number
when 0..threshold_1 then 0
when threshold_i..threshold_i+1 then i
else n
end
# example
thresholds = [ 4, 8, 10 ,12 ]
quantify(1) = 0
quantify(4) = 1
quantify(11) = 3
quantify(50) = 4
我想这就是你想要的:
Thresholds = [4, 8, 10, 12]
def quantify(n)
Thresholds.count { |t| n >= t }
end
你要的这个n的量化恰好是n大于等于的阈值个数,用Enumerable#count
.
很容易计算出来
这个怎么样?
thresholds = [ 4, 8, 10, 12 ]
def which_threshold(thresholds, n)
thresholds.find_index {|t| n < t } || thresholds.size
end
p which_threshold(thresholds, 1) # => 0
p which_threshold(thresholds, 4) # => 1
p which_threshold(thresholds, 11) # => 3
p which_threshold(thresholds, 50) # => 4
我有一个 Ruby 数组,它定义了一组整数阈值
thresholds = [under_threshold_1, under_threshold_2, ..., under_threshold_n, over_threshold]
我想将任何整数映射到对应于阈值数字的值。基本上
if threshold_a < number < threshold_b
return threshold_a
end
在 Ruby 中有没有很酷的方法来做到这一点?我需要处理 "edge" 个案例 < threshold_1
和 > threshold_over
。我只能想出一组(丑陋但有效的)if 语句或在数组上循环。
我实际上可以自由地按照我想要的方式对其进行建模(如果更方便,我可以将数组更改为其他内容)
我在想也许有一种很酷的方法可以在 case/when 子句中标出阈值
case number
when 0..threshold_1 then 0
when threshold_i..threshold_i+1 then i
else n
end
# example
thresholds = [ 4, 8, 10 ,12 ]
quantify(1) = 0
quantify(4) = 1
quantify(11) = 3
quantify(50) = 4
我想这就是你想要的:
Thresholds = [4, 8, 10, 12]
def quantify(n)
Thresholds.count { |t| n >= t }
end
你要的这个n的量化恰好是n大于等于的阈值个数,用Enumerable#count
.
这个怎么样?
thresholds = [ 4, 8, 10, 12 ]
def which_threshold(thresholds, n)
thresholds.find_index {|t| n < t } || thresholds.size
end
p which_threshold(thresholds, 1) # => 0
p which_threshold(thresholds, 4) # => 1
p which_threshold(thresholds, 11) # => 3
p which_threshold(thresholds, 50) # => 4