【发布时间】:2011-12-28 01:47:07
【问题描述】:
出于好奇,还有其他方法可以提取我的 AoH 结构的子集吗? AoH 是“矩形”的(即保证在所有 hashref 中具有相同的键)。
使用临时变量和嵌套的maps 对于本质上是一个花哨的哈希切片来说似乎有点太多了:
use strict;
use warnings;
use Data::Dump 'dump';
my $AoH = [ # There are many more keys in the real structure
{ a => "0.08", b => "0.10", c => "0.25" },
{ a => "0.67", b => "0.85", c => "0.47" },
{ a => "0.06", b => "0.57", c => "0.84" },
{ a => "0.15", b => "0.67", c => "0.90" },
{ a => "1.00", b => "0.36", c => "0.85" },
{ a => "0.61", b => "0.19", c => "0.70" },
{ a => "0.50", b => "0.27", c => "0.33" },
{ a => "0.06", b => "0.69", c => "0.12" },
{ a => "0.83", b => "0.27", c => "0.15" },
{ a => "0.74", b => "0.25", c => "0.36" },
];
# I just want the 'a's and 'b's
my @wantedKeys = qw/ a b /; # Could have multiple unwanted keys in reality
my $a_b_only = [
map { my $row = $_;
+{
map { $_ => $row->{$_} } @wantedKeys
}
}
@$AoH
];
dump $a_b_only; # No 'c's here
【问题讨论】:
-
我想可能是这样,而且我怀疑如果你使用这样的矩形 AoH,你会经常这样做,所以我建议编写一个名为
project()的函数来进行这种转换任意 AoH 和“列”列表。 -
我同意 j_random_hacker:发布的解决方案看起来不错,但是通过将核心功能编写为单独的函数可以大大提高可读性。例如,
select_from_hash(HASH_REF, ARRAY_REF_OF_WANTED_KEYS)。
标签: perl data-structures