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.
我有一个看起来像这样的变量:
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.