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...
But so far have gone down the wrong paths in terms of syntax. Any help would be much appreciated.
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...
But so far have gone down the wrong paths in terms of syntax. Any help would be much appreciated.
if (i >= 1 && i <= 10)
   do thing 1
...
This is just basic syntax in most languages, there may be another "Ruby" way of doing it that I am not aware of.
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
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...
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.
if i.between?(1, 10) do thing 1 elsif i.between?(11,20) do thing 2 ...