如何从Perl二维数组中提取一维数组?
如何将Perl二维数组的第一个元素转为一维数组
你当前的问题在于$matrix[0]是一个数组引用,直接将它赋值给@list时,Perl会把这个引用作为单个元素存入数组,所以@list会变成只包含一个数组引用的数组(也就是看起来还是二维结构)。
要得到和@array一样的一维数组,你需要对这个数组引用进行解引用,把它指向的实际数组元素展开出来。这里有两种常用方法:
方法1:使用花括号解引用
修改赋值语句为:
my @list = @{$matrix[0]};
这行代码的作用是把$matrix[0]指向的数组解引用,将里面的元素逐个赋值给@list。
修改后的完整代码:
use strict; use warnings; use Data::Dump; my @matrix = ([1,2,3], [4], [5,6]); my @array = (7,8,9); my @list = @{$matrix[0]}; # 这里修改了解引用方式 print "matrix: " ; dd \@matrix; print "array: " ; dd \@array; print "list: " ; dd \@list; print "size of matrix is ", scalar(@matrix), "\n"; print "size of array is ", scalar(@array), "\n"; print "size of list is ", scalar(@list), "\n";
运行后输出:
matrix: [[1, 2, 3], [4], [5, 6]] array: [7, 8, 9] list: [1, 2, 3] size of matrix is 3 size of array is 3 size of list is 3
方法2:使用后解引用语法(Perl 5.20+)
如果你使用的是Perl 5.20及以上版本,可以更简洁地用后解引用语法:
my @list = $matrix[0]->@*;
这个写法和@{$matrix[0]}效果完全一致,只是语法更直观。
补充说明
在Perl中,二维数组本质上是“数组的数组”——外层数组的每个元素都是一个指向另一个数组的引用。所以要获取内层数组的元素,必须先解引用对应的引用,才能得到一维数组的元素列表。
内容的提问来源于stack exchange,提问作者Roger Ford
相关产品推荐
相关产品推荐

