python - Perl 相当于 Python for 循环?
问题描述
是否有与以下 Python 代码等效的 Perl?
names['name'] = ['Bob', 'Bill', 'Terry']
obj = {'Students': [ {'Names': name} for name in names['name']]}
这最终会看起来像这样
编辑:正如蒂姆罗伯茨指出的那样:结果看起来像这样
[ {'Names': "Bob" }, { "Names": "Bill" },. { "Names": "Terry" } ]
我见过 Perl one liner 做不同的事情,但不是这个。
解决方案
您想要数据结构的map
内部。它不是单行的。这只是普通的代码。
my $obj = {
'Students' => [
map { 'Names' => $_ }, @{ $names{name} }
]
};
我在被评估的表达式之后使用了带有逗号 ( ) 的表达式形式map
( )。花括号 ( ) 是哈希引用构造函数。或者,您可以使用块形式 ( ),它会有一对额外的卷曲。map EXPR, LIST
,
{}
map BLOCK LIST
map { { 'Names' => $_ } } @{ $names{name} }
如果你想要一个普通的哈希而不是一个引用,像这样替换。
my %obj = (
# ...
);