Как я могу отсортировать хэш с объектами в Perl - PullRequest
0 голосов
/ 15 января 2019

Мне нужно отсортировать (или перестроить ключи) хэш с объектами, посмотрев на общий атрибут (например: val1) этих объектов. Как я могу это сделать?

Sample

1 Ответ

0 голосов
/ 15 января 2019

Я собираюсь использовать объект на основе массива для иллюстрации.

package obj;

sub new { my $class = shift; bless [@_], $class }
sub val1 { my $self = shift; $self->[0] }
sub val2 { my $self = shift; $self->[1] }
sub val3 { my $self = shift; $self->[2] }

package main;

my %hash = (
    p => obj->new(4,2,5),
    e => obj->new(1,2,5),
    z => obj->new(2,2,5),
    x => obj->new(3,2,5),
);

# sort the keys of hash according to the 'val1' attribute
my @keys = sort { $hash{$a}->val1 <=> $hash{$b}->val1 } keys %hash;

print join(", ", @keys);

Распечатает e, z, x, p.

Обратите внимание, что если объект использует представление на основе хеша, как в случае с примером кода, вы можете использовать приведенный выше код или просто получить доступ к атрибуту напрямую как хеш.

# sort the keys of hash according to the 'val1' attribute
my @keys = sort { $hash{$a}{val1} <=> $hash{$b}{val1} } keys %hash;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...