URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4805
[ Назад ]

Исходное сообщение
"Сортировка значений хэша"

Отправлено XPurple , 02-Ноя-05 21:11 
Как отсортировать значения хэша в алфавитном порядке ?
есть такой хеш %hash1=(2,Nora,4,Bora,3,Cora,1,Lora)

Требуется его отсортировать по именам (Bora,Cora,Lora,Nora) и привести к виду:

%hash2=(4,Bora,3,Cora,1,Lora,2,Nora);

Содержание

Сообщения в этом обсуждении
"Сортировка значений хэша"
Отправлено mr_jz , 02-Ноя-05 22:17 
>Как отсортировать значения хэша в алфавитном порядке ?

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

my @sorted_keys = sort ($hash1{$a} cmp $hash1{$b}) keys %hash1;
В @sorted_keys будет (4,3,1,2);


Если важно именно хранение в отсортированном виде то см. Tie::SortHash, правда я слабо себе представляю зачем такое может понадобиться.


"Сортировка значений хэша"
Отправлено XPurple , 03-Ноя-05 05:08 
>правда я слабо себе представляю зачем такое может понадобиться.
В хэше находятся имена пользователей, которые нужно вывести в отчет в алфавитном порядке.

"Сортировка значений хэша"
Отправлено madskull , 03-Ноя-05 10:06 
>>правда я слабо себе представляю зачем такое может понадобиться.
>В хэше находятся имена пользователей, которые нужно вывести в отчет в алфавитном
>порядке.
ну и используй:
print "$_ = $hash1{$_}" for(sort {$hash1{$a} cmp $hash1{$b}} keys %hash1);

"Сортировка значений хэша"
Отправлено XPurple , 03-Ноя-05 13:19 

>print "$_ = $hash1{$_}" for(sort {$hash1{$a} cmp $hash1{$b}} keys %hash1);
Так работает, спасибо.
А как сделать тоже самое для сортировки по значениям ключей ?



"Сортировка значений хэша"
Отправлено madskull , 03-Ноя-05 16:38 
>
>>print "$_ = $hash1{$_}" for(sort {$hash1{$a} cmp $hash1{$b}} keys %hash1);
>Так работает, спасибо.
>А как сделать тоже самое для сортировки по значениям ключей ?
Почитать чего-нить по перлу, подумать...

print "$_ = $hash1{$_}" for(sort keys %hash1);


"Сортировка значений хэша"
Отправлено XPurple , 08-Ноя-05 12:40 
Спасибо, все работает.



"Сортировка значений хэша"
Отправлено XPurple , 15-Ноя-05 15:08 
>Спасибо, все работает.
как сделать, что-бы при выводе значений хэша выводился порядковый номер значения:

%hash1=("name","Tora","second name","Smith");
Tora чтобы была 1, Smith -2 и т.д.



"Сортировка значений хэша"
Отправлено anonymous , 18-Ноя-05 11:01 
>>Спасибо, все работает.
>как сделать, что-бы при выводе значений хэша выводился порядковый номер значения:
>
>%hash1=("name","Tora","second name","Smith");
>Tora чтобы была 1, Smith -2 и т.д.


отказаться от хеша испаользовать массив, все проблемы решаются