【问题标题】:perl sort 2d array with referencesperl 使用引用对二维数组进行排序
【发布时间】: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 (&lt;=&gt;) 想想为什么$a-&gt;[4]$b-&gt;[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查看

标签: arrays perl sorting


【解决方案1】:

你需要:

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";
    }
    print "\n";
}

或者

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";
    }
    print "\n";
}

【讨论】:

  • 非常感谢!我很高兴看到两种不同的方式来做到这一点。
猜你喜欢
  • 2015-09-16
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2016-08-07
  • 2013-08-17
  • 2017-04-18
相关资源
最近更新 更多