LINUX.ORG.RU

perl Вывод из хэша ключ-значения с сортировкой по значению

 , ,


1

2

Как вывести из хэша пары ключ-значения или просто ключа с сортировкой по значению?
Например, вывод пары, но с сортировкой по ключу:

for my $key (sort keys %hash){
  print "$key = ${hash}{$key}";
}

★★

если значения — числа:

for my $key (sort { $hash{$a} <=> $hash{$b} } keys %hash) { … }

если значения — строки:

for my $key (sort { $hash{$a} cmp $hash{$b} } keys %hash) { … }

вроде так :)

arsi ★★★★★
()

Извращенный способ:

my %orig = (one => 1, two => 2, three => 3);
my %reverse = reverse %orig;

print "$reverse{$_} => $_\n" for sort keys %reverse; 

level1 ★★
()
Ответ на: комментарий от arsi

со строками нормально (хотя думал есть и другие простые пути), но как сделать -i, т.е. не учитывать регистр?

lioncub ★★
() автор топика
Последнее исправление: lioncub (всего исправлений: 2)
Ответ на: комментарий от lioncub

нашел тут как не учитывать регистр:

for my $key (sort { "\L$hash{$a}" cmp "\L$hash{$b}" } keys %hash) { … }

lioncub ★★
() автор топика
Последнее исправление: lioncub (всего исправлений: 1)
Ответ на: комментарий от vividsnow

А можно сказать, что в качестве дополнительной фичи отсеивает дубликаты в значениях. Вопрос постановки задачи.

level1 ★★
()
Ответ на: комментарий от level1

все нормуль:

for my $key (sort { "\L$hash{$a}" cmp "\L$hash{$b}" } keys %hash) { … }
- не отсеивает дубликаты в значениях!

lioncub ★★
() автор топика
Последнее исправление: lioncub (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.