Perl - 排序多维数组

Perl - Sort multidimensional array

我有一个看起来像这样的变量:

do {
  my $a = {
    computers => [
      {
        report_date_epoch => 1591107993595,
        serial_number => "C02YK1TAFVCF",
        username => "fake1\@example.com",
      },
      {
        report_date_epoch => 1626877069476,
        serial_number => "C03XF8AWJG5H",
        username => "fake2\@example.com",
      },
...

我想按纪元编号将其排序到一个没有 computers 数组的新变量中。

computer 键排序的数组引用中的哈希引用列表

use warnings;
use strict;
use feature 'say';
use Data::Dump qw(dd);

my $v = { 
    computers => [
        {
            report_date_epoch => 1591107993595,
            serial_number => "C02YK1TAFVCF",
            username => "fake1\@example.com",
        },
        {
            report_date_epoch => 1626877069476,
            serial_number => "C03XF8AWJG5H",
            username => "fake2\@example.com",
        }
    ]   
};

my @by_epoch =  
    sort { $a->{report_date_epoch} <=> $b->{report_date_epoch}  } 
    @{$v->{computers}};

dd $_ for @by_epoch;

我使用 Data::Dump 来打印复杂的数据结构。 (还有其他不错的。)

或使用核心(已安装)工具

use Data::Dumper;
...
say Dumper $_ for @by_epoch;

Sort::Key 比内置 sort 干净得多。在这个例子中没有太大区别,但随着任务变得更复杂,它只会变得更好。

use Sort::Key qw( ikeysort );

my @by_report_date =
   ikeysort { $_->{report_date_epoch} }   # Sort them.
      @{ $a->{computers} };               # Get the elements of the array of computers.