Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Answer: How do I shuffle an array?

( #266082=categorized answer: print w/ replies, xml ) Need Help??

Q&A > arrays > How do I shuffle an array? contributed by hossman

The List::Util module provides a shuffle function which implements the Fisher-Yates shuffle.
use List::Util qw(shuffle); my @data = (0..51); my @cards = shuffle @data;

Comment on Answer: How do I shuffle an array?
Select or Download Code
Replies are listed 'Best First'.
Re: Answer: How do I shuffle an array?
by wufnik (Friar) on Jun 16, 2003 at 11:01 UTC
    I prefer japhy's one-liner, which achieves shuffling via fisher-yates:

    @entry[-$i,$j] = @entry[$j,-$i] while $j = rand(@entry - $i), ++$i < @ +entry;
    as an aside - this is in the snippets section. would it not be nice to use snippets, or grinder's fabled categorized snippets library, as a source of data for categorized q&a?

    ttfn,

    ...wufnik

    -- in the world of the mules there are no rules --
Re: Answer: How do I shuffle an array?
by gmpassos (Priest) on Jun 16, 2003 at 03:31 UTC
    Independet way:
    my @data = 0..51; my @cards = sort { (-1,1)[rand(2)] } @data ;

    Graciliano M. P.
    "The creativity is the expression of the liberty".

Re: Answer: How do I shuffle an array?
by jdhedden (Deacon) on Dec 05, 2006 at 17:05 UTC
    Math::Random::MT::Auto has a shuffle function, as well:
    use Math::Random::MT::Auto 'shuffle'; my @cards = 0..51; shuffle(\@cards);

    Remember: There's always one more bug.
Log In?
Username:
Password:

What's my password?
Create A New User
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (5)
As of 2015-07-29 23:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (269 votes), past polls