2

在循环中找到了这个。我已经阅读了关于 splice 的内容,但它让我更加困惑。我不熟悉 Perl,但正在尝试将算法翻译成另一种语言。

my $sill = splice(@list,int(rand(@list)),1);
       last unless ($sill);

更具体地说:如果 $sill 没有从最后一个循环退出,那么里面会是什么?

谢谢你的帮助!

4

2 回答 2

4

这会从数组中随机删除一个元素@list。该值被分配给$sill。如果那是一个假值,则封闭循环(未显示)被打破。

splice接受一个数组、一个偏移量和一个长度,以及一个替换列表。如果省略替换,则删除元素。

长度是常数(1 个元素),但偏移量计算为介于 0 和 长度之间的随机整数@list

于 2013-02-08T13:21:44.800 回答
2

这意味着:

  • 从数组中删除一个随机元素list(0 -> 列表元素的数量)和
  • sill用删除的元素(pop()like)分配变量和
  • sill如果变量为假则退出循环

http://perldoc.perl.org/functions/splice.html

于 2013-02-08T13:22:03.370 回答