在Perl中对数组引用数组进行排序

Ear*_*ome 0 sorting perl

概要

我正在尝试根据数组的第二个元素对数组引用数组进行排序.

例如,我想将以下数组@array排序到另一个排序数组中:

632.8 5
422.1 4
768.6 34
Run Code Online (Sandbox Code Playgroud)

这是结束阵列, @sorted_array

422.1 4
632.8 5
768.6 34
Run Code Online (Sandbox Code Playgroud)

试图代码

我遇到了这个答案,并略微修改了它.但是,我收到一个错误:Use of uninitialized value in print at .\test.pl line 17当我尝试取消引用已排序的数组时.

#!/bin/perl
use strict;
use warnings;

my @array = ();
foreach my $i (0..10) {
    push @array, [rand(1000), int(rand(100))];
}

foreach my $i (@array) {
    print "@$i\n";
}
print "================\n";

my $sorted_ref = sort_arr(\@array);
print @$sorted_ref;

sub sort_arr {
    my @arr = @$_[0];
    my @sorted_arr = sort { $a->[1] cmp $b->[1] } @arr;
    return \@sorted_arr;
}
Run Code Online (Sandbox Code Playgroud)

AKH*_*and 5

您将数组引用传递给子例程,然后尝试将其用作数组.您需要先取消引用它.

sub sort_arr {
    my ($arr) = @_;
    my @sorted_arr = sort { $a->[1] cmp $b->[1] } @{ $arr };
    return \@sorted_arr;
}
Run Code Online (Sandbox Code Playgroud)

  • @SinTrans一个旁注,当数据似乎是数字时,你正在使用`cmp`(字符串比较).它可能应该是`<=>`(数字比较). (3认同)
  • @SinTrans如果你在括号中放置`$ _ [0]`就行了,例如`my @arr = @ {_ _ [0]}; (2认同)