簡體   English   中英

Perl 哈希添加值

[英]Perl hash add values

我正在嘗試將值推入散列。 我想在“par3”下添加值。 例如

$VAR1 = { 'obj1' => ['par1', 
                     'par2', 
                     'par3' => ['par4','par5','par6',....]]}

如果 'obj1'-'par1'-'par2'-'par3' 匹配,我還應該能夠將元素添加到 'par3' 中。 到目前為止,我有這個,但我不知道如何在“par3”下添加“第二級”:

push @{$a{$obj}},$par1,$par2,$par3

[ ... ]是對數組的引用。 數組元素是標量。 因此,不可能直接擁有您似乎要求的結構(即您問題中的par3 => [ ... ]偽代碼)。 perldsc

您要嘗試做什么並不明顯,但有幾個可能的想法可能是使用對哈希的引用,或者用哈希替換數組:

use Data::Dumper;

$Var2a = {
    'obj1' => [
        'par1', 
        'par2', 
        { 'par3' => undef, }
    ],
};

push @{ $Var2a->{obj1}[2]{par3} }, 'par4', 'par5', 'par6';
print Dumper $Var2a;

$Var2b = {
    'obj1' => {
        'par1' => undef, 
        'par2' => undef, 
        'par3' => undef,
    },
};

push @{ $Var2b->{obj1}{par3} }, 'par4', 'par5', 'par6';
print Dumper $Var2b;

我認為您想將孩子添加到 par3。 因此,我認為你希望帕斯有孩子。 如果是這樣,您需要不同的數據結構。

# Ordered
my $obj1 = [
   { name => 'par1', children => [ ] },
   { name => 'par2', children => [ ] },
   { name => 'par3', children => [
      { name => 'par4', children => [ ] },
      { name => 'par5', children => [ ] },
      { name => 'par6', children => [ ] },
   ] },
];

或者

# Unordered
my $obj1 = {
   par1 => { },
   par2 => { },
   par3 => {
      par4 => { },
      par5 => { },
      par6 => { },
   },
};

要將 par7 附加到 par3 的孩子,你會使用

# Ordered

use List::Util qw( first );

my $par7 = { name => 'par7', children => [ ] };

my $par3 = first { $_->{ name } eq 'par3' } @$obj1
   or die( "par3 not found" );

push @{ $par3->{ children } }, $par7;

或者

# Unordered

$obj1->{ par3 }{ par7 } = { };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM