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 ...