知者无忧

NOThing Is Impossible! —— 原创文章,谢绝转载!

RSS Feed

Daily Archives: 2007-08-18

perl函数shuffle的解析

2 Comments

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;
}

Filed under 计算机技术
Aug 18, 2007

功能

  • 登录
  • 日志 RSS
  • 评论 RSS
  • 中国博客网