perl函数shuffle的解析

分类: 计算机技术 | 由 zhang发布于

sub shuffle 接受一个数组参数,返回一个将元素随机打乱后的列表。来源于 List::Util 模块。




sub shuffle(@) {

    # 数组a由@_每个元素的引用组成,

   #避免@_中变量的复制到@a而造成不必要的开销;

   my @a = \(@_);

    my $n; #存放随机数

   my $i = @a; # $i是数组的长度

   map {

           # 从0到$i之间随机选一个数,

        #小于$i,所以不会是$i,并将$i减一,遍历@a的每个index。

        $n = rand($i - -);

           #从前$i个元素中随机选一个并返回,

        #并将选中的这个用元素$a[$i]替换;

        #这个表达式是一个列表,每次返回其第一个成员。

        (${$a[$n]}, $a[$n] = $a[$i])[0];

          } @a;

}


我的相关文章:

最近阅读过此文章的网友:
Trackback url : u can trackback from your own site

2 条评论 :

  1. lxmxnlxmxn 评论道:

    兄的代码让我看得是一头雾水,看了半天也没看明白是什么意思.
    关键是这一句:
    (${$a[$n]}, $a[$n] = $a[$i])[0];
    具体什么作用,语法这么复杂,难以理解,还请兄多指引一下.

  2. zhangzhang 评论道:

    注释中已经说了哦:从前$i个元素中随机选一个并返回,并将选中的这个用元素$a[$i]替换;这个表达式是一个列表,每次返回其第一个成员。
    这其实是个列表,[0]表示返回列表的第一个值。

发表看法