排列数组顺序以匹配混洗数组

时间:2016-01-04 21:10:29

标签: perl

我在这里头疼。我想要移动一系列位置,然后使用相同的模式对另一个数组进行洗牌:

use warnings;
use List::Util 'shuffle';

my @order = qw/1 3 2 0/;
my @words = qw/test this a is/; 
@new_order = shuffle(@order);
#some code.... ?
print @words; #this is a test

结果:

randomized words: this a is test.
randomized Order: 0 2 1 3.
sort: this is a test.

下次运行

randomized words: test a this is.
randomized Order:  2 3 1 0.
sort: this is a test.

and so on...

我已经尝试过,但说实话,我只是完全不解:/

2 个答案:

答案 0 :(得分:1)

如果您只想使用相同的模式对两个数组进行混洗,请执行以下操作:

use warnings;
use List::Util 'shuffle';

my @order = qw/1 3 2 0/;
my @words = qw/test this a is/;

my @shuffle = shuffle(0..$#order);
my @new_order = @order[@shuffle];
my @new_words = @words[@shuffle];

如果它更复杂,那么查看生成示例输出的代码(在您要求帮助的洗牌部分之后)真的很有帮助。

答案 1 :(得分:0)

最简单的解决方案只是在您自己的程序中提供some code.... ?注释。但是对shuffle的调用是多余的,它的作用只是因为你大概选择了你的数字

use strict;
use warnings;

use List::Util 'shuffle';

my @order = qw/ 1 3 2 0 /;
my @words = qw/ test this a is /; 

my @new_order = shuffle(@order);

@words = @words[@order];
print "@words\n";

输出

this is a test