繁体   English   中英

如何从哈希散列中映射(和排序)值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM