Для хэша этого формата:
my $itemHash = {
tag1 => {
name => "Item 1",
order => 1,
enabled => 1,
},
tag2 => {
name => "Item 2",
order => 2,
enabled => 0,
},
tag3 => {
name => "Item 3",
order => 3,
enabled => 1,
},
...
}
У меня есть этот код, который правильно перебирает хеш:
keys %$itemHash; # Resets the iterator
while(my($tag, $item) = each %$itemHash) {
print "$tag is $item->{'name'}"
}
Однако порядок, в котором повторяются эти элементы, кажется довольно случайным. Можно ли использовать один и тот же формат while
для их повторения в порядке, указанном ключом «порядок» в хэше для каждого элемента?
(Я знаю, что могу сначала отсортировать ключи, а затем выполнить цикл foreach. Просто смотрю, есть ли более чистый способ сделать это.)
Tie::IxHash
, хотя вам придется либо изменить свой код, чтобы вставить его в хэш в порядке, соответствующем ключу «порядок», либо иногда вызывать методTie::IxHash
Reorder
, чтобы расположить все в правильном порядке. - person rohanpm   schedule 26.09.2012