【问题标题】:Sorting hash of arrays: Isolate only the largest arrays数组的排序哈希:仅隔离最大的数组
【发布时间】:2019-01-23 21:03:33
【问题描述】:

我可以根据以下代码根据数组的大小对数组的哈希进行排序:

use strict; 
use warnings; 

my %HoA = (
flintstones    => [ "fred", "barney" ],
jetsons        => [ "george", "jane", "elroy" ],
simpsons       => [ "homer", "marge", "bart" ],
);

for my $key ( sort { @{$HoA{$b}} <=> @{$HoA{$a}} } keys %HoA ) {
    print "key: $key\tArray: @{$HoA{$key}} \n";
}

输出:

key: jetsons    Array: george jane elroy 
key: simpsons   Array: homer marge bart 
key: flintstones    Array: fred barney 

我想隔离所有关联为最大的数组以供后续处理。在这种情况下,两个数组被绑定为最大的,每个数组的大小为 3。我想要的输出看起来像:

key: jetsons    Array: george jane elroy 
key: simpsons   Array: homer marge bart

【问题讨论】:

  • 我们需要查看给您带来问题的代码。

标签: arrays perl sorting hash


【解决方案1】:
use strict;
use warnings;

use List::Util 'max';
use Data::Dump;

my %HoA = (
    flintstones => [ qw/ fred   barney / ],
    jetsons     => [ qw/ george jane  elroy / ],
    simpsons    => [ qw/ homer  marge bart / ],
);

my $max = max map { scalar @$_ } values %HoA;

dd [ grep { @$_ == $max } values %HoA ];

输出

[["george", "jane", "elroy"], ["homer", "marge", "bart"]]

或者,完全匹配您所需的输出

while ( my ($k, $v) = each %HoA ) {
    next unless @$v == $max;
    printf "key: %-10s Array: %s\n", $k, "@$v";
}

输出

key: simpsons   Array: homer marge bart
key: jetsons    Array: george jane elroy

【讨论】:

    猜你喜欢
    • 2014-10-27
    • 1970-01-01
    • 2012-07-28
    • 2018-11-15
    • 2011-12-16
    • 2011-07-31
    • 2013-12-04
    • 2012-08-17
    • 2019-04-25
    相关资源
    最近更新 更多