Как я могу извлечь значения хэш-функции в массив в их порядке вставки?

Учитывая хеш в Perl (какой-либо хеш), как я могу извлечь значения из того хеша в порядке, который они были добавлены и помещали их в массив?

Пример:

my %given = ( foo => '10', bar => '20', baz => '15' );

Я хочу получить следующий результат:

my @givenValues = (10, 20, 15);
6
задан Zaid 3 August 2010 в 14:36
поделиться

4 ответа

Из 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, ...)
17
ответ дан 8 December 2019 в 03:51
поделиться

Вы можете использовать значений , но я думаю, вы не можете получить их в правильном порядке, поскольку порядок уже был потерян, когда вы создавали хэш

2
ответ дан 8 December 2019 в 03:51
поделиться

Следующее сделает то, что вы хотите:

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 для сохранения порядка вставки.

5
ответ дан 8 December 2019 в 03:51
поделиться

Если у вас есть список ключей в правильном порядке, вы можете использовать хэш-фрагмент:

 my @keys   = qw(foo bar baz);
 my %given  = {foo => '10', bar => '20', baz => '15'}
 my @values = @given{@keys};

В противном случае используйте Tie :: IxHash .

3
ответ дан 8 December 2019 в 03:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: