您好我目前正在使用List :: Util shuffle随机化CGI数组但是我想修改代码以使用rand而不是
这是我的代码
print "Content-type: text/html\n\n";
use List::Util qw(shuffle);
@haikuone = ('behind', 'the', 'red', 'barn');
@haikutwo = ('prairie', 'grasses', 'reclaiming');
@haikuthree = ('the', 'basketball', 'court');
@randomize1 = shuffle(@haikuone);
@randomize2 = shuffle(@haikutwo);
@randomize3 = shuffle(@haikuthree);
print "<html>\n";
print "<head><title>Haiku_Random</title></head>\n";
print "<body>\n";
print "<pre>\n";
print "RANDOM HAIKU (DISCLAIMER: NONSENSE MAY OCCUR)\n";
print "@randomize1\n";
print "@randomize2\n";
print "@randomize3\n";
如何修改此代码以使用rand而不是List :: Util
我不认为这只是一个新手
我正在尝试让这个工作
$haikuone = ('behind', 'the', 'red', 'barn');
$haikutwo = ('prairie', 'grasses', 'reclaiming');
$haikuthree = ('the', 'basketball', 'court');
@random1 = $line1[rand @haikuone];
@random2 = $line2[rand @haikutwo];
@random3 = $line3[rand @haikuthree];
print "RANDOM HAIKU (DISCLAIMER: NONSENSE MAY OCCUR)\n";
print "$line1\n";
现在我这样做
#!/usr/local/bin/perl
@haikuone = ('behind', 'the', 'red', 'barn');
@haikutwo = ('prairie', 'grasses', 'reclaiming');
@haikuthree = ('the', 'basketball', 'court');
@random1 = $line1[rand @haikuone];
@random2 = $line2[rand @haikutwo];
@random3 = $line3[rand @haikuthree];
print "RANDOM HAIKU (DISCLAIMER: NONSENSE MAY OCCUR)\n";
print "@haikuone\n";
它将打印haikuone,但它不会随机化
答案 0 :(得分:2)
sub fisher_yates_shuffle {
my $deck = shift; # $deck is a reference to an array
return unless @$deck; # must not be empty!
my $i = @$deck;
while (--$i) {
my $j = int rand ($i+1);
@$deck[$i,$j] = @$deck[$j,$i];
}
}
my @randomize1 = @haikuone;
fisher_yates_shuffle(\@randomize1);
print "@randomize1\n";
答案 1 :(得分:1)
始终使用use strict; use warnings;
!您有以下代码,但没有任何名为@haikuone
,@haikutwo
,@haikuthree
,@line1
,@line2
或@line3
的数组。
@random1 = $line1[rand @haikuone];
@random2 = $line2[rand @haikutwo];
@random3 = $line3[rand @haikuthree];
使用三个数组各有一个元素也很奇怪。
答案 2 :(得分:0)
您好我正在使用List :: Util shuffle随机化一个数组 与CGI
这是有道理的。 List::Util::shuffle()
是在Perl中重新排列列表的最佳方式 - 无论您是否正在编写CGI程序。
但是我想修改代码以使用rand而不是
这没有意义。 rand()
不会随机播放列表。它只是生成一个随机数。
使用rand()
从数组中提取单个随机元素是个好主意。
my $random_element = @array[rand @array];
但那不是你想要做的。
如果您真的想使用rand()
,那么您需要将其用于功能中。在Perl常见问题解答中给出了一个很好的功能(在问题的答案中 - "How do I shuffle an array randomly?" - 所以也许你应该在问这里之前看一下常见问题解答),看起来像这样:
sub fisher_yates_shuffle {
my $deck = shift; # $deck is a reference to an array
return unless @$deck; # must not be empty!
my $i = @$deck;
while (--$i) {
my $j = int rand ($i+1);
@$deck[$i,$j] = @$deck[$j,$i];
}
}
但请注意,这是在Perl中实现的。 List :: Util中的shuffle()
函数是用C语言编写的,所以它会更快。
所以,总而言之,没有充分理由不使用List::Util::shuffle()
。