0

我在下面的表格中有一个输入,需要转换为下面给出的表格(见 $output),我确实查看了现有的问答,但没有找到任何相关内容,有人可以帮我解决这个问题吗?

$input = { 
           a => b,
           c => d,
           e => { 
                  f => {
                         g => [
                                {
                                  ab => 1111,
                                  ef => 3333
                                  ....
                                  ....
                                 },
                                {
                                  fd => 2222,
                                  as => 5555
                                  ....
                                  ....
                                }
                                .
                                .
                                .
                               ] } } };

$output = { 
           a => b,
           c => d,
           e => { 
                  f => {
                         g => { 
                                 1111 => {
                                            ef => 3333 
                                            ....   
                                            ....
                                           }
                                 5555 => {   
                                            fd => 2222
                                            ....
                                            ....
                                         }
                              }}}};
4

1 回答 1

0

首先,您在问题中包含了不相关的内容。

问题是关于将 var ( $input->{e}{f}{g}) 的值从

[
   {
      ab => 1111,
      ef => 3333,
      ...
   },
   {
      fd => 2222,
      as => 5555,
      ...
   },
   ...
]

{ 
   1111 => {
      ef => 3333,
      ...
   },
   5555 => {
      fd => 2222,
      ...
   },
   ...
}

除去多余的位后,问题就变得非常简单了。代码将如下所示:

my %keyed_recs;
for my $rec (@{ $input->{e}{f}{g} }) {
   my $key_field = ...;   # 'ab' or 'as'
   my $key = delete($rec->{$key_field});
   $keyed_recs{$key} = $rec;
}

$input->{e}{f}{g} = \%keyed_recs;

特别是如果关键字段的名称是恒定的,map可以用于简洁。

$input->{e}{f}{g} = {
   map { delete($_->{id}) => $_ }
      @{ $input->{e}{f}{g} }
};
于 2013-05-16T01:29:42.797 回答