# Sort\_by{rand} doesn't shuffle array

**URL:** <https://www.ruby-forum.com/t/sort-by-rand-doesnt-shuffle-array/56104>\
**Category:** Ruby\
**Created:** [January 3, 2006, 11:03am UTC](https://www.ruby-forum.com/t/sort-by-rand-doesnt-shuffle-array/56104 "2006-01-03T11:03:59Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![pergesu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/22d042/32.png) [@pergesu](https://www.ruby-forum.com/u/pergesu)\
**Post date:** [January 3, 2006, 11:03am UTC](https://www.ruby-forum.com/t/sort-by-rand-doesnt-shuffle-array/56104/1 "2006-01-03T11:03:59Z")

</div>

I did some searching on how to shuffle an array, and found  
sort\_by{rand}. However, if I call it, it doesn’t make a change to my  
array at all. I’ve got a class like this  
class MyClass  
def initialize  
# Populate the array  
@my\_array = Array.new  
…  
end

def shuffle!  
@my\_array.sort\_by{rand}  
end  
end

If I call shuffle! from my code, the array’s elements are still in the  
order that they were created. Why are they not being shuffled like I  
want?

---

<div class="post-metadata">

**Author:** ![pergesu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/22d042/32.png) [@pergesu](https://www.ruby-forum.com/u/pergesu)\
**Post date:** [January 3, 2006, 11:25am UTC](https://www.ruby-forum.com/t/sort-by-rand-doesnt-shuffle-array/56104/2 "2006-01-03T11:25:14Z")

</div>

On Tue, Jan 03, 2006 at 07:03:42PM +0900, Pat M. wrote:

> def shuffle!  
> @my\_array.sort\_by{rand}  
> @my\_array = @my\_array.sort\_by{rand}

---

<div class="post-metadata">

**Author:** ![pergesu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/22d042/32.png) [@pergesu](https://www.ruby-forum.com/u/pergesu)\
**Post date:** [January 3, 2006, 12:55pm UTC](https://www.ruby-forum.com/t/sort-by-rand-doesnt-shuffle-array/56104/3 "2006-01-03T12:55:52Z")

</div>

Mauricio F. wrote:

> On Tue, Jan 03, 2006 at 07:03:42PM +0900, Pat M. wrote:
> 
> > def shuffle!  
> > @my\_array.sort\_by{rand}
> 
> ```
> @my_array = @my_array.sort_by{rand}
> 
> ```

or @my\_array.sort\_by! { rand }

---

<div class="post-metadata">

**Author:** ![pergesu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/22d042/32.png) [@pergesu](https://www.ruby-forum.com/u/pergesu)\
**Post date:** [January 3, 2006, 1:11pm UTC](https://www.ruby-forum.com/t/sort-by-rand-doesnt-shuffle-array/56104/4 "2006-01-03T13:11:08Z")

</div>

> or @my\_array.sort\_by! { rand }  
> Except that sort\_by! does not exist 😉 (at least not in 1.8.4)

---

<div class="post-metadata">

**Author:** ![pergesu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/22d042/32.png) [@pergesu](https://www.ruby-forum.com/u/pergesu)\
**Post date:** [January 3, 2006, 1:14pm UTC](https://www.ruby-forum.com/t/sort-by-rand-doesnt-shuffle-array/56104/5 "2006-01-03T13:14:17Z")

</div>

On Tue, Jan 03, 2006 at 08:54:33PM +0900, Devin M. wrote:

> > 
> 
> or @my\_array.sort\_by! { rand }

RUBY\_RELEASE\_DATE # =\> “2005-12-24”  
RUBY\_VERSION # =\> “1.8.4”  
%w[a b c d].sort\_by!{rand} # =\>

# ~\> -:3: undefined method `sort\_by!’ for [“a”, “b”, “c”, “d”]:Array

(NoMethodError)

---

<div class="post-metadata">

**Author:** ![pergesu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/22d042/32.png) [@pergesu](https://www.ruby-forum.com/u/pergesu)\
**Post date:** [January 3, 2006, 1:23pm UTC](https://www.ruby-forum.com/t/sort-by-rand-doesnt-shuffle-array/56104/6 "2006-01-03T13:23:41Z")

</div>

Mauricio F. wrote:

> # ~\> -:3: undefined method `sort\_by!’ for [“a”, “b”, “c”, “d”]:Array (NoMethodError)

3.times { Hand.smack!(Head) }
