在范围内拟合整数的最干净方法

时间:2013-05-10 14:38:54

标签: ruby

在ruby中,在给定范围内拟合整数的最简洁方法是什么?如果调用的整数超出范围,则返回给定范围的最小值或最大值的方法。

原生红宝石中是否存在这样的方法?

120.fit(1..100) # => 100
-20.fit(1..100) # => 1

或者也许有一个漂亮的衬垫也能做到这一点?

修改

为了达到这个目的,我现在必须做一些事情:

some_integer = some_range.min if some_integer <= some_range.min
some_integer = some_range.max if some_integer >= some_range.max

3 个答案:

答案 0 :(得分:3)

这样的东西?

class Fixnum
  def fit(range)
    self > range.max ? range.max : (self < range.min ? range.min : self)
  end
end

用法:

> 5.fit(1..4) #=> 4
> 0.fit(1..4) #=> 1
> 3.fit(1..4) #=> 3

答案 1 :(得分:2)

不自信最干净,但这是一种方式

(1..100).minmax.push( -50 ).sort[1]
# => 1
(1..100).minmax.push( 120 ).sort[1]
# => 100

答案 2 :(得分:0)

r = (1..100)
v = -12
r.include?(v) ? v : ( r.begin > v ? r.begin : r.last)