Учитывая хеш в Perl (какой-либо хеш), как я могу извлечь значения из того хеша в порядке, который они были добавлены и помещали их в массив?
Пример:
my %given = ( foo => '10', bar => '20', baz => '15' );
Я хочу получить следующий результат:
my @givenValues = (10, 20, 15);
Из perldoc perlfaq4
: Как мне заставить мой хэш запомнить порядок, в котором я помещал в него элементы?
Используйте
Tie :: IxHash
из CPAN.используйте Tie :: IxHash; привяжите мой% myhash, 'Tie :: IxHash'; for (my $ i = 0; $ i <20; $ i ++) { $ myhash {$ i} = 2 * $ i; } мои @keys = ключи% myhash; # @keys = (0,1,2,3, ...)
Вы можете использовать значений
, но я думаю, вы не можете получить их в правильном порядке, поскольку порядок уже был потерян, когда вы создавали хэш
Следующее сделает то, что вы хотите:
my @orderedKeys = qw(foo bar baz);
my %records = (foo => '10', bar => '20', baz => '15');
my @givenValues = map {$records{$_}} @orderedKeys;
NB: Еще лучшим решением будет использование Tie::IxHash или Tie::Hash::Indexed для сохранения порядка вставки.
Если у вас есть список ключей в правильном порядке, вы можете использовать хэш-фрагмент:
my @keys = qw(foo bar baz);
my %given = {foo => '10', bar => '20', baz => '15'}
my @values = @given{@keys};
В противном случае используйте Tie :: IxHash
.