Сортировка хэша
Проблема
Требуется работать с элементами хэша в определенном порядке.
Решение
Воспользуйтесь функцией
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
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|