将散列数组折叠成 HoH
Folding Array of hashes to HoH
我有 $maps
作为 AoH,我希望 $new_map
成为基于封闭哈希值成员的 HoH。
我目前有:
map { $new_map->{$_->{TYPE}} = $_; delete $_->{TYPE} } @$maps;
这样就可以了..
我想知道是否有 better/simpler/cleaner 获取意图的方法。也许,通过从 map?
获取 return 值
$new_map = map { ... } @$maps;
谢谢
您最初的解决方案是滥用 map
,因为它没有使用运算符 returns 的列表。 for
是这里的正确工具,我认为这样读起来也更好,特别是如果您使用 delete
returns 它已删除的元素的值 [=16] =]
$new_map->{ delete $_->{TYPE} } = $_ for @$maps;
或者您可以使用 map
正确翻译数组,如此处
my %new_map = map { delete $_->{TYPE} => $_ } @$maps;
选择权在你自己
在 void 上下文中使用 map 混淆了意图,改变原始 @$maps
可能不是一个好主意(map 有副作用?),因此
my $new_map = {
map { my %h = %$_; delete $h{TYPE} => \%h } @$maps
};
我有 $maps
作为 AoH,我希望 $new_map
成为基于封闭哈希值成员的 HoH。
我目前有:
map { $new_map->{$_->{TYPE}} = $_; delete $_->{TYPE} } @$maps;
这样就可以了..
我想知道是否有 better/simpler/cleaner 获取意图的方法。也许,通过从 map?
获取 return 值$new_map = map { ... } @$maps;
谢谢
您最初的解决方案是滥用 map
,因为它没有使用运算符 returns 的列表。 for
是这里的正确工具,我认为这样读起来也更好,特别是如果您使用 delete
returns 它已删除的元素的值 [=16] =]
$new_map->{ delete $_->{TYPE} } = $_ for @$maps;
或者您可以使用 map
正确翻译数组,如此处
my %new_map = map { delete $_->{TYPE} => $_ } @$maps;
选择权在你自己
在 void 上下文中使用 map 混淆了意图,改变原始 @$maps
可能不是一个好主意(map 有副作用?),因此
my $new_map = {
map { my %h = %$_; delete $h{TYPE} => \%h } @$maps
};