Perl 在散列中插入散列的循环?
如果我有以下几点Perl 在散列中插入散列的循环?,perl,Perl,如果我有以下几点 my %big = (); my %a = {x => 1, y => 1}; my %b = {z => 1}; 我想以%a和%b作为结尾,在%big中这样做 $VAR1 = { 'b' => { 'x' => 1 }, 'a' => { 'y' => 1,
my %big = ();
my %a = {x => 1, y => 1};
my %b = {z => 1};
我想以%a
和%b
作为结尾,在%big
中这样做
$VAR1 = {
'b' => {
'x' => 1
},
'a' => {
'y' => 1,
'x' => 1
}
};
问题
如何编写循环将插入许多散列,如%a
和%b
到%big
更新
根据我的答案,我解决了这个问题
for my $x (@{$c->{slaves}}) {
$big{$x} = {xx::getFsList($x)};
}
你不需要循环
my %a = (x => 1, y => 1);
my %b = (z => 1);
my %big = (a => \%a, b => \%b);
你不需要循环
my %a = (x => 1, y => 1);
my %b = (z => 1);
my %big = (a => \%a, b => \%b);
正如所写的,您的代码有几个问题
my %a = (x => 1, y => 1);
my %b = (z => 1);
我们的%a
和我们的%b
而不是我的
,并启用严格参考
,您可能会想要什么。这是因为符号引用仅适用于全局变量:
for my $hash_name (qw( a b )) {
no strict 'refs';
$big{$hash_name} = \%{$hash_name};
}
不过,您可能不需要它,因为您已经知道有两个名为a
和b
的散列,所以为什么要循环它们的名称呢?如果确实想保存一些击键,可以使用字符串eval
生成代码:
for my $hash_name (qw( a b )) {
eval "\$big{$hash_name} = \\%$hash_name";
}
我不认为它比
my %big = ( a => \%a,
b => \%b,
);
my $char = 'a';
while (my @list = func()) {
$big{ $char++ } = { @list };
}
正如所写的,您的代码有几个问题
my %a = (x => 1, y => 1);
my %b = (z => 1);
我们的%a
和我们的%b
而不是我的
,并启用严格参考
,您可能会想要什么。这是因为符号引用仅适用于全局变量:
for my $hash_name (qw( a b )) {
no strict 'refs';
$big{$hash_name} = \%{$hash_name};
}
不过,您可能不需要它,因为您已经知道有两个名为a
和b
的散列,所以为什么要循环它们的名称呢?如果确实想保存一些击键,可以使用字符串eval
生成代码:
for my $hash_name (qw( a b )) {
eval "\$big{$hash_name} = \\%$hash_name";
}
我不认为它比
my %big = ( a => \%a,
b => \%b,
);
my $char = 'a';
while (my @list = func()) {
$big{ $char++ } = { @list };
}
如果要为哈希动态创建名称
a
和b
等,请务必小心。如果要动态地为散列创建名称a
和b
等,请参阅并非常小心。请参阅,它实际上是一个函数getList()
,返回类型为%a
和%b
的散列,所以我想这就是为什么我需要一个循环。我不知道会调用多少次getList()
,从而输出一个散列,该散列应该进入%big
@JasmineLognnes:函数究竟返回什么?仅仅是一个列表?@JasmineLognnes所以键应该是a
,b
,c
等等?我对问题做了一个糟糕的简化,并且还把哈希的()
和{}
搞混了。请参阅更新后的OP,在那里我发布了解决我问题的方法。它实际上是一个函数getList()
,返回类型为%a
和%b
的散列,所以我想这就是为什么我需要一个循环的原因。我不知道会调用多少次getList()
,从而输出一个散列,该散列应该进入%big
@JasmineLognnes:函数究竟返回什么?仅仅是一个列表?@JasmineLognnes所以键应该是a
,b
,c
等等?我对问题做了一个糟糕的简化,并且还把哈希的()
和{}
搞混了。请参阅更新的OP,我在那里发布了解决我问题的方法。