我有一个包含四个范围的数组:
[0..25, 26..50, 51..75, 76..100]
如何匹配/比较整数与此数组?例如:
28 # => 26..50
89 # => 76..100
这样做的最佳方式是什么?
答案 0 :(得分:5)
[0..25, 26..50, 51..75, 76..100].find{|r| r.include?(28)} # => 26..50
答案 1 :(得分:1)
正如@WandMaker所说,有一些范围方法可以帮助你
http://ruby-doc.org/core-2.2.0/Range.html#method-i-cover-3F
如果我理解你的问题,你想检查你的范围内是否包含一个int?
my_array.each do |range|
if range.cover?(my_integer)
return true
end
end
return false
答案 2 :(得分:1)
关于your comment:
我将数字与哈希值匹配[:range => :得分了]。所以,我有4个范围,得分"糟糕" "如此" " OK"和"超级"。如果我的变量适合范围,则返回分数
您可以使用case
声明:
def score(number)
case number
when 0..25 then :bad
when 26..50 then :so_so
when 51..75 then :ok
when 76..100 then :super
end
end
score(28) #=> :so_so
score(89) #=> :super
答案 3 :(得分:0)
或者,如果您只是需要知道它是否与任何范围匹配:
@receiver(post_save, sender=User,dispatch_uid="add_user_profile")
def add_user_profile(sender,instance, **kwargs):
请注意p [0..25, 26..50, 51..75, 76..100].any?{|range| range.cover?(my_int) } #=> true
比cover?
快,并且在使用整数时可以安全使用。