匹配对多个数字范围的响应

时间:2012-12-09 19:10:43

标签: ruby functional-programming logic

我有一个方法可以返回1到100之间的数字

取决于响应(x)是否介于 100 - 90我想要一个回复,89 - 85另一个84 - 72另一个......等等。

我用

if x > 90
 response a
elsif x > 85
 response b
elsif etc...

但这看起来有点混乱,有没有更好的重构方法呢?

非常感谢。

2 个答案:

答案 0 :(得分:6)

利用Range#===并使用case声明:

case x
when 72..84
  # Do something
when 85..89
  # Do something
when 90..100
  # Do something
else
  # Do something when no matches
end

答案 1 :(得分:3)

您可以尝试一个表(Hash),其中键是范围,值是您要返回的数字:

T = { 
  (90..100) => 1,
  (85..89) => 2,
  # and so on
}

(r,v) = T.find {|r,v| r.member? x}

if v then 
  return v
else
  # x wasn't in any of the defined ranges
end