Determining if a variable is within range?

后端 未结 9 941
自闭症患者
自闭症患者 2020-12-12 12:02

I need to write a loop that does something like:

if i (1..10)
  do thing 1
elsif i (11..20)
  do thing 2
elsif i (21..30)
  do thing 3
etc...
相关标签:
9条回答
  • 2020-12-12 13:02

    As @Baldu said, use the === operator or use case/when which internally uses === :

    case i
    when 1..10
      # do thing 1
    when 11..20
      # do thing 2
    when 21..30
      # do thing 3
    etc...
    
    0 讨论(0)
  • 2020-12-12 13:02

    A more dynamic answer, which can be built in Ruby:

    def select_f_from(collection, point) 
      collection.each do |cutoff, f|
        if point <= cutoff
          return f
        end
      end
      return nil
    end
    
    def foo(x)
      collection = [ [ 0, nil ],
                     [ 10, lambda { puts "doing thing 1"} ],
                     [ 20, lambda { puts "doing thing 2"} ],
                     [ 30, lambda { puts "doing thing 3"} ],
                     [ 40, nil ] ]
    
      f = select_f_from(collection, x)
      f.call if f
    end
    

    So, in this case, the "ranges" are really just fenced in with nils in order to catch the boundary conditions.

    0 讨论(0)
  • 2020-12-12 13:09

    if you still wanted to use ranges...

    def foo(x)
     if (1..10).include?(x)
       puts "1 to 10"
     elsif (11..20).include?(x)
       puts "11 to 20"
     end
    end
    
    0 讨论(0)
提交回复
热议问题