Перебор элементов хэша в порядке вставки
Проблема
Функции
keys и
each извлекают элементы хэша в довольно странном порядке.
Вы хотите получить элементы в порядке вставки.
Решение
Воспользуйтесь модулем Tie::IxHash.
use Tie::IxHash;
tie %ХЭШ, "Tie::IxHash";
# Операции с хэшем %ХЭШ
@keys = keys %ХЭШ; # Массив @keys отсортирован в порядке вставки
Комментарий
Модуль Tie::IxHash заставляет функции
keys,
each и
values
возвращать элементы в порядке занесения в хэш. Это часто избавляет от
необходимости заранее обрабатывать ключи хэша какой-нибудь сложной сортировкой или
поддерживать отдельный массив, содержащий ключи в порядке их вставки.
Tie::IxHash также представляет объектно-ориентированный интерфейс к функциям
splice,
push,
pop,
shift,
unshift,
keys,
values и
delete, а также многим другим.
Следующий пример демонстрирует использование keys и each:
# Инициализировать
use Tie::IxHash;
tie %food_color, "Tie::IxHas";
$food_color{Banana} = "Yellow";
$food_color{Apple} = "Green";
$food_color{Lemon} = "Yellow";
print "In insertion order, the foods are:\n";
foreach $food (keys %food_color) {
print " $food\n";
}
print "Still in insertion order, the foods colors are:\n";
while (( $food, $color ) = each %food_color ) {
print "$food is colored $color.\n";
}
In insertion order, the foods are:
Banana
Apple
Lemon
Still in insertion order, the foods colors are:
Banana is colored Yellow.
Apple is colored Green.
Lemon is colored Yellow.
См. также
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|