我有一个像二维数组的数据文件
22950 12
80044 22
02942 06
42018 20
63829 10
...
Run Code Online (Sandbox Code Playgroud)
我想将这个数组随机排列,比如
42018 20
22950 12
...
Run Code Online (Sandbox Code Playgroud)
看起来像List中的'shuffle'可以用来随机播放一个向量,如何处理这种二维数组呢?
由于您只是改组数组的第一个维度,因此List::Util::shuffle无需任何修改即可运行.
Perl没有多维数组,它有标量数组,每个标量也可以是一个数组.这实际上是一个多维数组,但它意味着您可以使用正常的数组操作shuffle,因为shuffle不关心数组的值是什么(在这种情况下,它们将是其他数组).
所以这一行:
my @random = shuffle \@array1, \@array2, \@array3;
Run Code Online (Sandbox Code Playgroud)
是相同的
my @random = shuffle 1, 2, 3;
Run Code Online (Sandbox Code Playgroud)
就所shuffle涉及的问题而言(洗牌的3个要素清单).
假设您的2D数据包含在数组中 @data
my @data = (
[1234, 34],
[4564, 45],
...
);
Run Code Online (Sandbox Code Playgroud)
然后你会写:
use List::Util 'shuffle';
my @random = shuffle @data;
Run Code Online (Sandbox Code Playgroud)
然后你会正常访问2D结构:
say $random[0][1];
Run Code Online (Sandbox Code Playgroud)