Perl推入排序数组

Eri*_*tis 7 arrays sorting perl

考虑下面的数据块,我如何维护第3个字段对数组进行排序,并继续推送项目?

$VAR1 = [
          '1111',
          'http://...',
           3       #this is one of the 3rd field mentioned above
        ];
$VARN = [
           '5555',
           'http://...',
            0
        ];
Run Code Online (Sandbox Code Playgroud)


我的代码看起来像:

my @curItem = ($item->{id}, $item->{href}, getTotal( $item->{id}) );
push @items, \@curItem;
Run Code Online (Sandbox Code Playgroud)

我发现这个模块与我需要的类似.

任何帮助赞赏.

Bri*_*ach 8

您可以使用该模块,只需提供排序:

tie @a, "Tie::Array::Sorted", sub { $_[0]->[2] <=> $_[1]->[2] };

(或者沿着这些方向的东西......我将不得不检查它.基本上,你需要根据你传入的数组ref的元素进行排序)

编辑:是的,这适用于您的数据.刚检查一下:

use Tie::Array::Sorted;

tie @a, "Tie::Array::Sorted", sub { $_[0]->[2] <=> $_[1]->[2] };

push @a, [ "1111", "http:// ...", 3];
push @a, [ "5555", "http:// ...", 0];

foreach $ref (@a)
{
    print $ref . "\n";
    print "@$ref \n";
}
Run Code Online (Sandbox Code Playgroud)

输出:

ARRAY(0x9130888)
5555 http:// ... 0
ARRAY(0x90dd818)
1111 http:// ... 3
Run Code Online (Sandbox Code Playgroud)