[EMAIL PROTECTED] wrote:
> Hello,

Hello,

> I am working on a playlist managment program in perl - I need a way to
> shuffle the playlist - the playlist format is very simple - one
> filename on each line.
> 
> Each file name is a reletive path, i.e:
> 
> folder1/file1.mp3
> folder2/file2.mp3
> 
> If possible I would like the file to be shuffled so that whenever
> possible, there are no 2 files from the same folder next to each
> other.

perldoc -q shuffle


> In the origional file, pre-shuffling, the files are sorted into folders, i.e:
> 
> folder1/file1.mp3
> folder1/file2.mp3
> folder2/file3.mp3
> ......
> 
> It would be an adequate solution to just cycle through all the folders, like:
> 
> folder1/file1.mp3
> folder2/file1.mp3
> folder3/file1.mp3
> folder1/file2.mp3
> .......

This may do what you want:


my %folders;
# assuming that @playlist contains folder/file names
for ( @playlist ) {
    my ( $folder ) = m!^(.+)/!;
    push @{ $folders{ $folder } }, $_;
    }


# use the shuffle sub from perlfaq4
fisher_yates_shuffle( $folders{ $_ } ) for keys %folders;


while ( %folders ) {
    my @curr;
    for ( keys %folders ) {
        push @curr, pop @{ $folders{ $_ } };
        delete $folders{ $_ } unless @{ $folders{ $_ } };
        }
    print "$_\n" for @curr;
    }




John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to