将散列数组折叠成 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
};