知者无忧

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

RSS Feed

perl函数shuffle的解析

2 Comments
Posted by on 2007-08-18 at 23:51

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 计算机技术
You can leave a comment, or trackback from your own site.

2 Comments

  • On 2007-12-11 at 18:56 lxmxn said

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

    回复

  • On 2007-12-13 at 21:32 zhang said

    [Comment ID #252674 Will Be Quoted Here]

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

    回复

发表评论

您的电子邮箱不会被公开。 标记为 * 的区域必须填写

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

功能

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