分类: 计算机技术 |
由 zhang发布于 08月 18th, 2007
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
兄的代码让我看得是一头雾水,看了半天也没看明白是什么意思.
关键是这一句:
(${$a[$n]}, $a[$n] = $a[$i])[0];
具体什么作用,语法这么复杂,难以理解,还请兄多指引一下.
注释中已经说了哦:从前$i个元素中随机选一个并返回,并将选中的这个用元素$a[$i]替换;这个表达式是一个列表,每次返回其第一个成员。
这其实是个列表,[0]表示返回列表的第一个值。