【问题标题】:Perl dynamic multidimensional array [duplicate]Perl动态多维数组
【发布时间】:2014-11-09 11:41:07
【问题描述】:

在我的 Perl 程序中,我用于测试以下静态数组定义:

my %data = (
    56 => [
        {   'Titel'    => 'Test 1',
            'Subtitel' => 'Untertest 1',
            'Beginn'   => '00:05',
            'Ende'     => '00:50'
        },
        {   'Titel'    => 'Test 2',
            'Subtitel' => 'Untertest 2',
            'Beginn'   => '00:50',
            'Ende'     => '01:40'
        }
    ],
    58 => [
        {   'Titel'    => 'Test 3',
            'Subtitel' => 'Untertest 3',
            'Beginn'   => '00:10',
            'Ende'     => '01:50'
        }
    ],
    51 => [
        {   'Titel'    => 'Test 4',
            'Subtitel' => 'Untertest 4',
            'Beginn'   => '00:05',
            'Ende'     => '00:20'
        },
        {   'Titel'    => 'Test 5',
            'Subtitel' => 'Untertest 5',
            'Beginn'   => '00:20',
            'Ende'     => '00:40'
        },
        {   'Titel'    => 'Test 6',
            'Subtitel' => 'Untertest 6',
            'Beginn'   => '00:40',
            'Ende'     => '01:05'
        }
    ],
);

现在我想改变它,从数据库中获取数据。我的选择返回 5 个值:一个 id(如我的示例中的 56、58 或 51)以及每个 Titel、Subtitel、Beginn 和 Ende 的值。

如何构建与我的静态示例中相同的数组构造?

提前致谢!最好的祝福 丹尼尔

【问题讨论】:

  • 您可以通过多种方式做到这一点。你已经尝试过做什么?

标签: arrays perl hash multidimensional-array


【解决方案1】:

假设你最后想要它,你需要将你的 hashref 推入存储在 $data{$id} 的 arrayref 中:

push @{ $data{$id} }, {
    Titel    => $titel,
    Subtitel => $subtitel,
    Beginn   => $beginn,
    Ende     => $ende,
};

【讨论】:

    【解决方案2】:

    可能是这样的。抱歉,我已经有一段时间没有做 perl 了。

    #!/usr/bin/perl
    
    use Data::Dumper;
    
    
    
    sub dataset2struc { 
      my $result = {};
      foreach my $row (@_) {
       my $id = $row->{'id'};
       my $recref = $result->{$id} || ();
       my @rec = @{$recref};
       delete $row->{'id'};
       push(\@rec, $row);
       $result->{$id} = \@rec;
      }
      return $result;
    }
    
    my @dataset = ({"id" => 1, "a" => "b"}, {"id" => 2, "a" => "c"}, {"id" => 2, "a" => "d"});
    print Dumper(dataset2struc(@dataset));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 2018-05-16
      • 2016-01-28
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多