我有$maps
作为AoH,我希望根据封闭哈希的成员使$new_map
成为HoH。
我目前有:
map { $new_map->{$_->{TYPE}} = $_; delete $_->{TYPE} } @$maps;
这就是工作..
我想知道是否有更好/更简单/更清洁的方式来获得意图。也许,通过从地图获取返回值?
$new_map = map { ... } @$maps;
由于
答案 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
};