If you do not have [] .shuffle, [] .sort_by {rand} works, as indicated by sepp2k..sort_by temporarily replaces each element with something to sort, in this case a random number.
[]. sort {rand-0.5}, however, will not move correctly. Some languages (for example, some Javascript implementations) do not shuffle arrays if you randomly sort by array, and sometimes quite public ones.
JS analysis (with graphs!): Http://www.robweir.com/blog/2010/02/microsoft-random-browser-ballot.html
Ruby is no different! This problem has the same problem. :)
=>
[[22336, 18872, 14814, 21645, 22333], [17827, 25005, 20418, 18932, 17818], [19665, 15726, 29575, 15522, 19512], [18075, 18785, 20283, 24931, 17926], [22097, 21612, 14910, 18970, 22411]]
Each element should appear in each position about 20,000 times. [] .sort_by (rand) gives much better results.
=>
[[19913, 20074, 20148, 19974, 19891], [19975, 19918, 20024, 20030, 20053], [20028, 20061, 19914, 20088, 19909], [20099, 19882, 19871, 19965, 20183], [19985, 20065, 20043, 19943, 19964]]
Similarly for [] .shuffle (which is probably the fastest)
[[20011, 19881, 20222, 19961, 19925], [19966, 20199, 20015, 19880, 19940], [20062, 19894, 20065, 19965, 20014], [19970, 20064, 19851, 20043, 20072], [19991, 19962, 19847, 20151, 20049]]