 
 This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Iterating Over an Array | ||
|---|---|---|
| Code | Expected | Actual | 
| [1, 2, 3, 4].each { |x| puts x } | 1 2 3 4 | 1 2 3 4 | 
| [1, 2, 3, 4].collect { |x| x ** 2 } | [1, 4, 9, 16] | [1, 4, 9, 16] | 
| ['a', 'b', 'c'].each_with_index do |item, index| 
  puts "At position #{index}: #{item}"
end | At position 0: a At position 1: b At position 2: c | At position 0: a At position 1: b At position 2: c | 
| [1, 2, 3, 4].reverse_each { |x| puts x } | 4 3 2 1 | 4 3 2 1 | 
| array = ['a', 'b', 'c']
array.collect! { |x| x.upcase }
array | ["A", "B", "C"] | ["A", "B", "C"] | 
| array.map! { |x| x.downcase }
array | ["a", "b", "c"] | ["a", "b", "c"] | 
| array = ['junk', 'junk', 'junk', 'val1', 'val2']
3.upto(array.length-1) { |i| puts "Value #{array[i]}" } | Value val1 Value val2 | Value val1 Value val2 | 
| array = ['1', 'a', '2', 'b', '3', 'c']
(0..array.length-1).step(2) do |i| 
  puts "Letter #{array[i]} is #{array[i+1]}"
end | Letter 1 is a Letter 2 is b Letter 3 is c | Letter 1 is a Letter 2 is b Letter 3 is c | 
| for element in ['a', 'b', 'c'] puts element end | a b c | a b c | 
| for element in (1..3) puts element end | 1 2 3 | 1 2 3 | 
| array = ['cherry', 'strawberry', 'orange']
for index in (0...array.length)
  puts "At position #{index}: #{array[index]}"
end
index = 0
while index < array.length
  puts "At position #{index}: #{array[index]}"
  index += 1  
end
index = 0
until index == array.length
  puts "At position #{index}: #{array[index]}"
  index += 1  
end | At position 0: cherry At position 1: strawberry At position 2: orange | At position 0: cherry At position 1: strawberry At position 2: orange At position 0: cherry At position 1: strawberry At position 2: orange At position 0: cherry At position 1: strawberry At position 2: orange | 
| array = [1,2,3,4,5]
new_array = []
front_index = 0
back_index = array.length-1
while front_index <= back_index
  new_array << array[front_index]
  front_index += 1
  if front_index <= back_index
   new_array << array[back_index]
    back_index -= 1
  end
end
new_array | [1, 5, 2, 4, 3] | [1, 5, 2, 4, 3] | 
| class Array
 def each_from_both_sides
    front_index = 0
    back_index = self.length-1
    while front_index <= back_index
      yield self[front_index]
      front_index += 1
      if front_index <= back_index
	yield self[back_index]
        back_index -= 1
      end
    end
  end  
end
new_array = []
[1,2,3,4,5].each_from_both_sides { |x| new_array << x }
new_array | [1, 5, 2, 4, 3] | [1, 5, 2, 4, 3] | 
| class Array
  def collect_from_both_sides
    new_array = []
    each_from_both_sides { |x| new_array << yield(x) }
    return new_array
  end
end
["ham", "eggs", "and"].collect_from_both_sides { |x| x.capitalize } | ["Ham", "And", "Eggs"] | ["Ham", "And", "Eggs"] |