Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Остортировать хэш-массив по его значениям


Автор: vax1700 26.3.2008, 10:35
Есть хэш-массив с элементами тоже в виде хэш-массивов:
Код
my %s = ();

# 57 { r => 1, l => 11540 }
$s{ 57 }{ r }  = 1;
$s{ 57 }{ l }  = 11540;

# 52 { r => 1, l => 11511 }
$s{ 52 }{ r }  = 1;
$s{ 52 }{ l }  = 11511;

# 107 { r => 2, l => 11795 }
$s{ 107 }{ r } = 2;
$s{ 107 }{ l } = 11795;

# 147 { r => 1, l => 11948 }
$s{ 147 }{ r } = 1;
$s{ 147 }{ l } = 11948;

# 85 { r => 1, l => 11675 }
$s{ 85 }{ r }  = 1;
$s{ 85 }{ l }  = 11675;


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

Код

107 { r => 2, l => 11795 }
147 { r => 1, l => 11948 }
85 { r => 1, l => 11675 }
57 { r => 1, l => 11540 }
52 { r => 1, l => 11511 }



Я никак не догоняю как отсортировать по значениям. Всё что я нашёл в интернете (разнообразные вызовы функции sort) они сортируют по ключу массив, здесь же мне надо по значениям.
Может кто-нибудь направит на пусть истинный или даст какую-нибудь ссылочку?

Автор: amg 26.3.2008, 11:06
Цитата(vax1700 @  26.3.2008,  10:35 Найти цитируемый пост)
как отсортировать по значениям
Это легко:
Код

foreach (sort {$s{$b}{r} cmp $s{$a}{r} or $s{$b}{l} cmp $s{$a}{l}} keys %s) {
  print "$_ { r => $s{$_}{r}, l => $s{$_}{l} }\n";
}



Автор: vax1700 26.3.2008, 11:35
Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)