From: Joao Silva Date: 2008-05-16T05:52:46+09:00 Subject: Re: Randomizing an Array? Florian Frank wrote: > Daniel Waite wrote: >> Florian Frank wrote: >>> Don't do this, better use (1..10).sort_by { rand }. Your version is >>> equivalent to (1..10).sort { 1 } and *always* creates the same >>> permutation for this array. >> >> It's random for me. Both work. > > No, really, it isn't. It may "look random", but try sorting (1..10) many > times and ponder the coincidence. That's because sort{ foo } expects foo to be in -1,0,1. rand() is always [0, 1). rand(2)-1 is (-1,1) however and thus will work just fine. :) One could do sort{rand <=> rand}, but that's ~9x slower by my testing. irb(main):163:0> (1..10).to_a.sort{rand } => [10, 6, 1, 7, 3, 8, 5, 9, 4, 2] irb(main):164:0> (1..10).to_a.sort{rand } => [10, 6, 1, 7, 3, 8, 5, 9, 4, 2] irb(main):165:0> (1..11).to_a.sort{rand } => [11, 6, 1, 7, 3, 8, 5, 9, 4, 10, 2] irb(main):166:0> (1..12).to_a.sort{rand } => [12, 7, 1, 8, 3, 9, 5, 10, 2, 11, 6, 4] vs irb(main):186:0> (1..12).to_a.sort{rand(2) -1} => [1, 2, 6, 11, 9, 4, 8, 7, 5, 10, 3, 12] irb(main):187:0> (1..12).to_a.sort{rand(2) -1} => [1, 9, 8, 3, 5, 6, 11, 4, 2, 10, 7, 12] - Sai http://saizai.com, who is too lazy to remember his actual account pass right now -- Posted via http://www.ruby-forum.com/.