Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按散列值排序Perl_Perl_Sorting_Hash Of Hashes - Fatal编程技术网

按散列值排序Perl

按散列值排序Perl,perl,sorting,hash-of-hashes,Perl,Sorting,Hash Of Hashes,假设我有一个哈希数据结构,构造如下: %HoH => ( flintstones => { family_members => "fred;wilma;pebbles;dino", number_of_members => 4, }, jetsons => { family_members => "george;jane;elro

假设我有一个哈希数据结构,构造如下:

%HoH => (
     flintstones => {
               family_members    => "fred;wilma;pebbles;dino",
               number_of_members => 4,
     },
     jetsons => {
               family_members    => "george;jane;elroy",
               number_of_members => 3,
     },
     simpsons => {
               family_members    => "homer;marge;bart;lisa;maggie",
               number_of_members => 5,
     },

)
我如何根据成员的值编号从最大到最小对键(在本例中为族)进行排序?然后我想打印出最高的两个。这里有一个大致的想法,但我知道它是错误的:

foreach $value (
    sort {
    $HoH{$a}{$number_of_members} cmp $HoH{$b}{$number_of_members}
    } keys %HoH)
my $count = 0;
while ($key, $value) = each %HoH) {
    if (count <= 2){
        print "${HoH}{$key}\t$key{$value}";
    }
}
continue {
    $count++;
};

你在正确的轨道上。在散列中使用$a和$b内部变量,并以数字形式比较值,而不是cmp

打印时,我发现将密钥存储在数组中并使用数组片访问它们是最容易的

use strict;
use warnings;

my %HoH = (
     flintstones => {
               family_members    => "fred;wilma;pebbles;dino",
               number_of_members => 4,
     },
     jetsons => {
               family_members    => "george;jane;elroy",
               number_of_members => 3,
     },
     simpsons => {
               family_members    => "homer;marge;bart;lisa;maggie",
               number_of_members => 5,
     },    
);
my @sorted = sort { $HoH{$b}{'number_of_members'} <=> 
                    $HoH{$a}{'number_of_members'} } keys %HoH;

for (@sorted[0,1]) {   # print only first two
    print join("\t", $_, $HoH{$_}{'family_members'}), "\n";
}

你在正确的轨道上。在散列中使用$a和$b内部变量,并以数字形式比较值,而不是cmp

打印时,我发现将密钥存储在数组中并使用数组片访问它们是最容易的

use strict;
use warnings;

my %HoH = (
     flintstones => {
               family_members    => "fred;wilma;pebbles;dino",
               number_of_members => 4,
     },
     jetsons => {
               family_members    => "george;jane;elroy",
               number_of_members => 3,
     },
     simpsons => {
               family_members    => "homer;marge;bart;lisa;maggie",
               number_of_members => 5,
     },    
);
my @sorted = sort { $HoH{$b}{'number_of_members'} <=> 
                    $HoH{$a}{'number_of_members'} } keys %HoH;

for (@sorted[0,1]) {   # print only first two
    print join("\t", $_, $HoH{$_}{'family_members'}), "\n";
}

将cmp替换为。你做了一个数值比较来代替cmp。你在做一个数字比较。我必须仔细看一看才能弄明白一切,但我明白它的要点。@cooldood3490不客气。请随时询问是否有不清楚的地方。谢谢。我必须仔细看一看才能弄明白一切,但我明白它的要点。@cooldood3490不客气。请随意询问是否有不清楚的地方。
simpsons        homer;marge;bart;lisa;maggie
flintstones     fred;wilma;pebbles;dino