Anyone have a better idea?
class Array
def shuffle
t_self = self.dup
t_size = self.size
result=[]
t_size.times { result << t_self.slice!(rand(t_self.size)) }
result
end
def shuffle!
t_self = self.dup
t_size = self.size
self.clear
t_size.times { self << t_self.slice!(rand(t_self.size)) }
self
end
end
Regards...
--
Posted via http://www.ruby-forum.com/.
ary2 = ary.sort_by { rand }
--
RMagick: http://rmagick.rubyforge.org/
"Gone in 60 seconds"...
Thanks
If you need a less predictable one than the sort_by { rand } then I
suggest this:
class Array
# Shuffle the array
def shuffle!
n = length
for i in 0...n
r = Kernel.rand(n-i)+i
self[r], self[i] = self[i], self[r]
end
self
end
# Return a shuffled copy of the array
def shuffle
dup.shuffle!
end
end
This shuffle is known as fisher-yates/knuth shuffle and is afaik by
current means considered impossible to predict. Also its complexity is
O(n) compared to the O(nlogn) of sort_by (which for many cases probably
still is faster in ruby since it runs mainly in C, I didn't bench it,
though).
As of 1.8.7 you have those methods already natively provided by ruby.
Regards
Stefan (apeiros)
Ah! If only the Ubuntu/Debian promotion cycle for Ruby out paced
continental drift...
Thanks again...
I appreciate it.
I heard the 9.04 release will be called Galloping Gondwanaland.
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407
Joel VanderWerf wrote:
> Jeff Moore wrote:
>> Ah! If only the Ubuntu/Debian promotion cycle for Ruby out paced
>> continental drift...
>
> I heard the 9.04 release will be called Galloping Gondwanaland.
--
Posted via http://www.ruby-forum.com/.