Как я могу отсортировать хэши Perl, значения которых являются ссылками на массивы? - PullRequest
3 голосов
/ 06 мая 2009

Эй, мне просто интересно, есть ли классный "один вкладыш", который бы сортировал мой хэш, содержащий ссылки на массивы. Итак, у меня есть несколько ключей / значений в моем хэше, например:

$DataBase{$key} = \@value;

Однако я бы хотел отсортировать хеш по элементу array[0]. Затем перебери их. У меня было это для начала:

foreach my $key (sort {$DataBase{$a} cmp $DataBase{$b} } keys %DataBase)

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

Ответы [ 3 ]

8 голосов
/ 06 мая 2009
foreach my $key (sort {$DataBase{$a}->[0] cmp $DataBase{$b}->[0] } keys %DataBase)
2 голосов
/ 06 мая 2009

Для записи (вы, вероятно, из C фона), Perl не имеет указателей, но ссылки :

Perl [...] позволяет создавать анонимные структуры данных и поддерживает фундаментальный тип данных называется "ссылка" слабо эквивалентно указателю C. Так же, как C указатели могут указывать на данные, а также процедуры, ссылки Perl могут ссылаются на обычные типы данных (скаляры, массивы и хэши) и другие объекты, такие как подпрограммы, typeglobs и файловые дескрипторы. В отличие от С, они не позволяют тебе заглядывать и тыкать сырые места памяти.

похоже, но не то же самое.

С

1 голос
/ 07 мая 2009

Я думаю, что вы задаете тот же самый базовый вопрос, что и Как я могу отсортировать хэш хэшей по ключу в Perl? . Мой ответ, который есть в FAQ по Perl, показывает, как сортировать хеш любым удобным вам способом.

...