Hi Matthew, I like these implementations, though I have some comments and simplifications. Matthew Smillie wrote: > def shuffle > res = [] > indices = (0...size).to_a.shuffle! > indices.each_with_index { |x, i| > block_given? ? yield(self[x]) : res[i] = self[x] > } > block_given? ? self : res > end > end I'm not too keen on #shuffle having a dual function as both a shuffler and an iterator -- I'd be more comfortable using `ary.shuffle.each'. That would also allow a major simplification of the implementation: class Array def shuffle values_at(*(0..size-1).to_a.shuffle!) end end Cheers, Daniel