【发布时间】:2015-07-30 02:51:52
【问题描述】:
我对 perl 有点陌生,所以请多多包涵。到目前为止,我已经用尽了所有可能的解决方案。
假设我有一些帽子的尺寸在其他地方填充。我想根据某一列对它们进行排序。我尝试使用 perl 的“排序”来做到这一点,但我没有让它们真正排序。我相信问题是我对引用感到困惑。下面的代码是我目前正在使用的代码。
my @hat1 = [3, 4, 5, 6, 7, 8];
my @hat2 = [4, 6, 5, 1, 1, 2];
my @hat3 = [9, 8, 9, 3, 4, 4];
#eventually work with unknown number of hats
my @binToSort = (\@hat1,\@hat2,\@hat3);
my @binSorted = sort { $a->[4] <=> $b->[4] } @binToSort;
for my $ref (@binSorted){
for my $inner (@$ref){
print "@$inner\n";
}
}
到目前为止,它会打印出未排序的数组值:
3 4 5 6 7 8
4 6 5 1 1 2
9 8 9 3 4 4
但我希望能够到达:
4 6 5 1 1 2
9 8 9 3 4 4
3 4 5 6 7 8
我觉得这是一个简单的问题,但我想不出正确的方法。非常感谢任何帮助!
【问题讨论】:
-
提示:用
use warnings;开启警告,你会得到Use of uninitialized value in numeric comparison (<=>)想想为什么$a->[4]和$b->[4]可能是未定义的。 -
如有必要,添加
use Data::Dumper; print Dumper \@binToSort; -
我现在看到了警告,谢谢。
print Dumper \@binToSort;给了我$VAR1 = [[[3,4,5,6,7,8]],[[4,6,5,1,1,2]],[[9,8,9,3,4,4]]];(以列的形式)。那些双括号......这是一个危险信号,对吗? -
是的,这是一个危险信号,eval.in/366831
-
@imomushi8:Perl 确实将其视为一维数组。问题不在于您要引用
@hat数组,而在于您将它们初始化为具有一个 single 元素,每个元素都是一个数组引用。print Dumper \@hat1查看