How can I take n elements at random from a Perl array?

后端 未结 4 1269
半阙折子戏
半阙折子戏 2020-12-14 12:10

I have an array, A = [a1,a2,a3,...aP] with size P. I have to sample q elements from array A.

I plan to use a loop with q

4条回答
  •  难免孤独
    2020-12-14 12:18

    From perldoc perlfaq4:

    How do I shuffle an array randomly?

    If you either have Perl 5.8.0 or later installed, or if you have Scalar-List-Utils 1.03 or later installed, you can say:

    use List::Util 'shuffle';
    @shuffled = shuffle(@list);
    

    If not, you can use a Fisher-Yates shuffle.

    sub fisher_yates_shuffle {
    
        my $deck = shift;  # $deck is a reference to an array
        return unless @$deck; # must not be empty!
    
        my $i = @$deck;
        while (--$i) {
            my $j = int rand ($i+1);
            @$deck[$i,$j] = @$deck[$j,$i];
        }
    }
    
    
    # shuffle my mpeg collection
    # 
    
    my @mpeg = 

    You could also use List::Gen:

    my $gen = <1..10>;
    print "$_\n" for $gen->pick(5);  # prints five random numbers
    

提交回复
热议问题