The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Сортировка хэша по значениям"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Сортировка хэша по значениям"  
Сообщение от sn email(??) on 19-Июн-08, 10:52 
Есть хэш хэшей вида:

%list = (
  Ivanov => {
    fio => "Иванов А.А.",
    address => "192.168.1.1",
    ostatok => -311.22,
  },
  Petrov => {
    fio => "Петров Б.Б.",
    address => "192.168.1.2",
    ostatok => 1100.54,
  },
...
);

Вывод производится так:

    foreach $k (sort keys %list) {

print $list{$k}{fio}.":".$list{$k}{address}.":".$list{$k}{ostatok}."\n";
    }

Посоветуйте, как описать sort{ ля{$b} <=> ля{$a} }, чтобы организовать вывод списка, отсортированного по размеру остатка.

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Сортировка хэша по значениям"  
Сообщение от Mil on 19-Июн-08, 12:24 
Короткий путь -- заменть
sort keys %list
на
sort {$list{$a}{'ostatok'} <=> $list{$b}{'ostatok'}} keys %list

но на больших массивах это будет протормаживать. Правильнее в таких случаях использовать преобразование рендола-шварца. В данном случае оно вот так выглядет:

map {$_->[1]} sort {$a->[0] <=> $b->[0]} map {[$list{$_}{'ostatok'}, $_]} keys(%list)

оно чуть медленней на маленьких списках, но на больших на много быстрей

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Сортировка хэша по значениям"  
Сообщение от sn email(??) on 19-Июн-08, 15:02 
Благодарю
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Сортировка хэша по значениям"  
Сообщение от XAnder (ok) on 19-Июн-08, 12:33 
>Посоветуйте, как описать sort{ ля{$b} <=> ля{$a} }, чтобы организовать вывод списка, отсортированного по размеру остатка.

Самый очевидный вариант:

sort {$list{$a}{ostatok} <=> $list{$b}{ostatok}}

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру