Итерация ссылки на массив и преобразование в хэш в Perl - PullRequest
0 голосов
/ 06 марта 2019

У меня есть хеш (отпечатано Dumper), который описан ниже

$VAR1 = {
          'items' => [
                    {
                      'name' => 'test1',
                      'id' => '1',
                      'desc' => 'desc1',
                    },
                    {
                      'name' => 'test2',
                      'id' => '2',
                      'desc' => 'desc2',
                    }
                  ],
           };

Мне нужно преобразовать "items", которая является ссылкой на массив, в хеш, как показано ниже. («items» будет хешем со значением «id», являющимся ключом)

$VAR1 = {
          'items' => {
                     '1' =>{
                         'name' => 'test1',
                         'id' => '1',
                         'desc' => 'desc1',
                      },
                     '2' => {
                         'name' => 'test2',
                         'id' => '2',
                         'desc' => 'desc2',
                    }
                  }
           };

Давайте начнем с приведенного ниже кода. (Предположим, что $ data представляет исходные данные, а $ newitems представляет измененные элементы)

my $data;
my $items = $data->{items};
my %newitems;
foreach my $element (@$items) {
......
}

1 Ответ

3 голосов
/ 06 марта 2019

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

Но на самом деле вы не являетесь, тогда:

$data -> {items} = { map { $_ -> {id} => $_ } @{$data->{items} } };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...