匹配/比较值与数组成员

时间:2016-02-04 08:56:44

标签: ruby

我有一个包含四个范围的数组:

[0..25, 26..50, 51..75, 76..100]

如何匹配/比较整数与此数组?例如:

28 # => 26..50
89 # => 76..100

这样做的最佳方式是什么?

4 个答案:

答案 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?快,并且在使用整数时可以安全使用。