Сортировка хэша

Проблема

Требуется работать с элементами хэша в определенном порядке.

Решение

Воспользуйтесь функцией keys для построения списка ключей, а затем отсортируйте их в нужном порядке:
# %hash - сортируемый хэш
@keys = sort { criterion() } (keys %hash);
foreach $key (@keys) {
  $value = $hash{$key};
  # Сделать что-то с $key, $value
}

Комментарий

Хотя хранить элементы хэша в заданном порядке невозможно (без использования модуля Tie:IxHash), перебирать их можно в любом порядке.
Существует множество разновидностей одного базового механизма: вы извлекаете ключи, упорядочиваете их функцией sort и обрабатываете элементы в новом порядке. Рассмотрим пару практических примеров.
В первом фрагменте sort просто используется для упорядочения ключей по алфавиту:
foreach $food (sort keys %food_color) {
  print "$food is $food_color($food).\n"; }
}
Другой фрагмент сортирует ключи по ассоциированным значениям:
foreach $food (sort { $food_color{$a} cmp $food_color{$b } )
  keys %food_color) {
    print "$food is $food_color{$food}.\n"; }
}
Наконец, сортировка выполняется по длине ассоциированных значений:
@foods = sort { length($food_color{$a}) <=> length($food_color{$b}) }
  keys %food_color;
foreach $food (@foods) {
  print "$food is $food_color{$food}.\n";
}

См. также

Описание функций sort и keys



2013-09-10 17:05:19

Proverte kod v komentariyah gde pro list tam oshibki detskie




Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: