[英]How do I map (and sort) values from a hash of hashes?
我有一个哈希哈希,如下所示:
%hash = ( a => { b => 1, c =>2, d => 3}, a1 => { b => 11, c =>12, d => 13}, a2 => { b => 21, c =>22, d => 23} )
我想提取“ b”元素并将其放入数组。 现在,我正在遍历散列来执行此操作,但是我认为可以通过使用map来稍微提高效率。 我很确定,如果这是一个哈希数组,我会使用类似以下的方法:
@hasharray = ( { b => 1, c =>2, d => 3}, { b => 11, c =>12, d => 13}, { b => 21, c =>22, d => 23} ) @array = map { ($_->{b} => $_) } @hasharray
如果我错了,请原谅我,我仍在学习map的工作原理。 但是我想知道的是,我将如何映射散列的哈希? 使用地图甚至可能吗? 我还没有找到任何这样做的例子。
更好的是,此代码中的下一步是对数组进行填充后对其进行排序。 我很确定这是可能的,但是我对使用map自行解决还不够聪明。 我将如何一次性完成所有这些工作?
谢谢。 赛斯
这将提取并排序所有“ b”:
my @array = sort { $a <=> $b } map $_->{b}, values %hash;
这会在@array
填充数组引用的排序列表,每个列表都包含b
的值和它来自的hashref。
my @array = sort {$$a[0] <=> $$b[0]}
map { [$$_{b} => $_] }
values %hash;
my @sorted_hashes = map {$$_[1]} @array;
采取第二种解决方案,并将values %hash
替换为@hasharray
:
@array = map { ($_->{b} => $_) } values %hash;
(并且不要忘记;
来终止该语句。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.