折叠哈希的哈希数组

时间:2015-07-09 17:43:15

标签: perl perl-data-structures

我有$maps作为AoH,我希望根据封闭哈希的成员使$new_map成为HoH。

我目前有:

map { $new_map->{$_->{TYPE}} = $_; delete $_->{TYPE} } @$maps;

这就是工作..

我想知道是否有更好/更简单/更清洁的方式来获得意图。也许,通过从地图获取返回值?

$new_map = map { ... } @$maps; 

由于

2 个答案:

答案 0 :(得分:3)

您的原始解决方案是误用map,因为它不使用运算符返回的列表。 for在这里是正确的工具,我认为它的读取方式也好得多,特别是如果你使用delete返回已删除元素值的事实

$new_map->{ delete $_->{TYPE} } = $_ for @$maps;

或者您可以正确使用map翻译数组,如此处

my %new_map = map { delete $_->{TYPE} => $_ } @$maps;

选择是你自己的

答案 1 :(得分:1)

在void上下文中使用map会模糊意图,而改变原始@$maps可能不是一个好主意(带副作用的地图?),因此

my $new_map = {
  map { my %h = %$_; delete $h{TYPE} => \%h } @$maps
};