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.
Extracting Portions of Arrays, Destructively and Non- | ||
---|---|---|
Code | Expected | Actual |
a = ("a".."h").to_a |
["a", "b", "c", "d", "e", "f", "g", "h"] | ["a", "b", "c", "d", "e", "f", "g", "h"] |
a[0] |
"a" | "a" |
a[1] |
"b" | "b" |
a.at(1) |
"b" | "b" |
a.slice(1) |
"b" | "b" |
a[-1] |
"h" | "h" |
a[-2] |
"g" | "g" |
a[1000] |
nil | nil |
a[-1000] |
nil | nil |
a[2..5] |
["c", "d", "e", "f"] | ["c", "d", "e", "f"] |
a[2...5] |
["c", "d", "e"] | ["c", "d", "e"] |
a[0..0] |
["a"] | ["a"] |
a[1..-4] |
["b", "c", "d", "e"] | ["b", "c", "d", "e"] |
a[5..1000] |
["f", "g", "h"] | ["f", "g", "h"] |
a[2..0] |
[] | [] |
a[0...0] |
[] | [] |
a[-3..2] |
[] | [] |
a[2, 4] |
["c", "d", "e", "f"] | ["c", "d", "e", "f"] |
a[2, 3] |
["c", "d", "e"] | ["c", "d", "e"] |
a[0, 1] |
["a"] | ["a"] |
a[1, 2] |
["b", "c"] | ["b", "c"] |
a[-4, 2] |
["e", "f"] | ["e", "f"] |
a[5, 1000] |
["f", "g", "h"] | ["f", "g", "h"] |
a.slice!(2..5) |
["c", "d", "e", "f"] | ["c", "d", "e", "f"] |
a |
["a", "b", "g", "h"] | ["a", "b", "g", "h"] |
a.slice!(0) |
"a" | "a" |
a |
["b", "g", "h"] | ["b", "g", "h"] |
a.slice!(1,2) |
["g", "h"] | ["g", "h"] |
a |
["b"] | ["b"] |
a = ("a".."h").to_a |
["a", "b", "c", "d", "e", "f", "g", "h"] | ["a", "b", "c", "d", "e", "f", "g", "h"] |
a.values_at(0) |
["a"] | ["a"] |
a.values_at(1, 0, -2) |
["b", "a", "g"] | ["b", "a", "g"] |
a.values_at(4, 6, 6, 7, 4, 0, 3) |
["e", "g", "g", "h", "e", "a", "d"] | ["e", "g", "g", "h", "e", "a", "d"] |
a.find_all { |x| x < "e" } |
["a", "b", "c", "d"] | ["a", "b", "c", "d"] |
a.reject { |x| x < "e" } |
["e", "f", "g", "h"] | ["e", "f", "g", "h"] |
a.grep /[aeiou]/ |
["a", "e"] | ["a", "e"] |
a.grep /[^g]/ |
["a", "b", "c", "d", "e", "f", "h"] | ["a", "b", "c", "d", "e", "f", "h"] |
class Array def strip_values_at!(*args) args.each do |x| #For each mentioned index, replace its value with a dummy object. values = [] dummy = Object.new args.each do |i| if i < size values << self[i] self[i] = dummy end end #Strip out the dummy object. delete(dummy) return values end end end a = ("a".."h").to_a a.strip_values_at!(1, 0, -2) |
["b", "a", "g"] | ["b", "a", "g"] |
a |
["c", "d", "e", "f", "h"] | ["c", "d", "e", "f", "h"] |
a.strip_values_at!(1000) |
[] | [] |
a |
["c", "d", "e", "f", "h"] | ["c", "d", "e", "f", "h"] |
class Array def extract! ary = self.dup self.reject! { |x| yield x } ary - self end end a = ("a".."h").to_a a.extract! { |x| x < "e" && x != "b" } |
["a", "c", "d"] | ["a", "c", "d"] |
a |
["b", "e", "f", "g", "h"] | ["b", "e", "f", "g", "h"] |
class Array def grep_extract!(re) extract! { |x| re.match(x) } end end a = ("a".."h").to_a a.grep_extract!(/[aeiou]/) |
["a", "e"] | ["a", "e"] |
a |
["b", "c", "d", "f", "g", "h"] | ["b", "c", "d", "f", "g", "h"] |