簡體   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