Perl Sort Hash of Arrays - PullRequest
       2

Perl Sort Hash of Arrays

4 голосов
/ 16 декабря 2011

У меня есть хэш массивов, который выглядит следующим образом:

{ $key, [$val1, $val2] }

Я пытаюсь численно отсортировать по второму значению массива и распечатать весь хэш.Я посмотрел на посты Шварцского преобразования, но я не видел ни одного, который бы делал именно то, что я хочу.Я также очень смущен синтаксисом и тем, как отобразить отсортированные значения обратно в исходную форму {$key, [$val1, $val2] }.Любая помощь будет оценена!

Ответы [ 2 ]

14 голосов
/ 16 декабря 2011

Не совсем уверен, что вы имеете в виду, но вы реализуете процедуру сортировки по значению массива внутри хеша:

my %hash = ( 'key1' => [ 1, 2 ], 'key2' => [ 2, 3 ] );

for my $key ( sort { $hash{$a}[1] <=> $hash{$b}[1] } keys %hash ) {
    print "$key => '", join(", ", @{$hash{$key}}), "'\n";
}
7 голосов
/ 16 декабря 2011

Если вы действительно хотите использовать преобразование Шварца, вот способ сделать это:

#!/usr/bin/perl
use Data::Dump qw(dump);

my %hash = (k1 => [1, 2], k2 => [24, 5], k3 => [5, 1]);
foreach(
        sort { $a->[1] <=> $b->[1] }
        map { [$_, $hash{$_}->[1] ] } keys %hash) {
    say $_->[0],' => ',dump$hash{$_->[0]};
}

выход:

k3 => [5, 1]
k1 => [1, 2]
k2 => [24, 5]

Примечание:

Я просто даю этот ответ в качестве примера преобразования Шварца

Но, как сказано в комментарии, в случае, описанном в вопросе, в этом нет необходимости, ST экономит затраты, когда перед сортировкой выполняются вычисления для каждого элемента массива. На заданный вопрос вычисление не требуется, поэтому не используйте здесь ST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...