Perl 相当于 Python for 循环?
Perl equivalent of Python for loop?
是否有与以下 Python 代码等效的 Perl?
names['name'] = ['Bob', 'Bill', 'Terry']
obj = {'Students': [ {'Names': name} for name in names['name']]}
最终看起来像这样
编辑:
正如 Tim Roberts 指出的那样:结果看起来像这样
[ {'Names': "Bob" }, { "Names": "Bill" },. { "Names": "Terry" } ]
我见过 Perl 的一个衬里做不同的事情,但不是这个。
你想要 a map
在你的数据结构中。这不是单线的。这只是普通代码。
my $obj = {
'Students' => [
map { 'Names' => $_ }, @{ $names{name} }
]
};
我使用了表达式形式 map
(map EXPR, LIST
),在被计算的表达式后面有一个逗号 (,
)。花括号 ({}
) 是散列引用构造函数。或者,您可以使用块形式 (map BLOCK LIST
),它会有一对额外的卷发。
map { { 'Names' => $_ } } @{ $names{name} }
如果您想要一个普通的散列而不是一个引用,请像这样替换。
my %obj = (
# ...
);
这是另一种方法:
use Data::Dumper;
my @names = ('Bob', 'Bill', 'Terry');
my %out_dict;
my @students_dict = ();
foreach my $name (@names) {
push(@students_dict, {'Names' => $name});
}
$out_dict{'Students'} = \@students_dict;
print Dumper \%out_dict;
输出:
$VAR1 = {
'Students' => [
{
'Names' => 'Bob'
},
{
'Names' => 'Bill'
},
{
'Names' => 'Terry'
}
]
};
是否有与以下 Python 代码等效的 Perl?
names['name'] = ['Bob', 'Bill', 'Terry']
obj = {'Students': [ {'Names': name} for name in names['name']]}
最终看起来像这样
编辑: 正如 Tim Roberts 指出的那样:结果看起来像这样
[ {'Names': "Bob" }, { "Names": "Bill" },. { "Names": "Terry" } ]
我见过 Perl 的一个衬里做不同的事情,但不是这个。
你想要 a map
在你的数据结构中。这不是单线的。这只是普通代码。
my $obj = {
'Students' => [
map { 'Names' => $_ }, @{ $names{name} }
]
};
我使用了表达式形式 map
(map EXPR, LIST
),在被计算的表达式后面有一个逗号 (,
)。花括号 ({}
) 是散列引用构造函数。或者,您可以使用块形式 (map BLOCK LIST
),它会有一对额外的卷发。
map { { 'Names' => $_ } } @{ $names{name} }
如果您想要一个普通的散列而不是一个引用,请像这样替换。
my %obj = (
# ...
);
这是另一种方法:
use Data::Dumper;
my @names = ('Bob', 'Bill', 'Terry');
my %out_dict;
my @students_dict = ();
foreach my $name (@names) {
push(@students_dict, {'Names' => $name});
}
$out_dict{'Students'} = \@students_dict;
print Dumper \%out_dict;
输出:
$VAR1 = {
'Students' => [
{
'Names' => 'Bob'
},
{
'Names' => 'Bill'
},
{
'Names' => 'Terry'
}
]
};