From: "David A. Black" Date: 2008-07-04T20:40:31+09:00 Subject: Re: pseudo-randomize an array in a consistent order On Fri, 4 Jul 2008, Max Williams wrote: > Here's my final version in case anyone's interested: > > class Array > > def randomize!(seed=nil) > srand(seed) if seed > i = length - 1 > while (i > 0) > #have to specify Kernel::rand to avoid method name clash > j = Kernel::rand(i) > # Swap self[i] and self[j] > tmp = self[i] > self[i] = self[j] > self[j] = tmp > i -= 1 > end > #reset srand > srand if seed > self > end > > def randomize(seed=nil) > self.dup.randomize!(seed) > end > > end I don't think it randomizes very well. >> 1000.times { puts "yes!" if [1,2].randomize == [1,2] } => 1000 > I encountered a puzzling gotcha with rand - it turns out that Rails > monkey-patches Array with 'rand' (no arguments) which pulls out a random > element. I'd describe that as a gotcha with Rails :-) David -- Rails training from David A. Black and Ruby Power and Light: Intro to Ruby on Rails July 21-24 Edison, NJ Advancing With Rails August 18-21 Edison, NJ See http://www.rubypal.com for details and updates!