我想用散列鍵對散列數組進行排序,我怎麼能在Perl中做到這一點? 結構創建這樣的:如何通過哈希名稱對散列數組進行排序?
push (@{$structure[$endpoint][1]}, \%temp_hash);
%temp_hash
是一個簡單的散列與key->value
。 現在我想作爲排序依據的哈希鍵數組,還有在每個哈希只有一個鍵 - >價值......它一直在爭取2小時已經和我放棄了..
我想用散列鍵對散列數組進行排序,我怎麼能在Perl中做到這一點? 結構創建這樣的:如何通過哈希名稱對散列數組進行排序?
push (@{$structure[$endpoint][1]}, \%temp_hash);
%temp_hash
是一個簡單的散列與key->value
。 現在我想作爲排序依據的哈希鍵數組,還有在每個哈希只有一個鍵 - >價值......它一直在爭取2小時已經和我放棄了..
嘗試
@sorted = sort { (keys %$a)[0] cmp (keys %$b)[0] } @{$structure[$endpoint][1]};
根據每個散列的第一個(唯一)鍵排序數組的元素(它們是散列引用)。如果鍵是數字,則使用<=>
。
測試代碼:
%a = ('a' => 1);
%b = ('zz' => 2);
%c = ('g' => 3);
@arr = (\%a, \%b, \%c);
print "Unsorted\n";
for (@arr)
{
printf "%s\n",((keys %$_)[0]);
}
@sorted = sort { (keys %$a)[0] cmp (keys %$b)[0] } @arr;
print "\nSorted\n";
for (@sorted)
{
printf "%s\n",((keys %$_)[0]);
}
請出示一個完整的,但小例子演示你已經嘗試過,是行不通的。 – stevieb
將數組拉出(只是爲了簡化語法),然後'my @sorted = sort {(keys%$ a)[0] cmp(keys%$ b)[0]} @arr;'。在數組中使用單對散列似乎有點尷尬......這可能是你爲什麼會遇到問題的原因。你可以使用[Data :: Dumper](http://perldoc.perl.org/Data/Dumper.html)或[Data :: Dump](http://search.cpan.org/~gaas/Data-Dump -1.23/lib/Data/Dump.pm),或者類似地很容易地看到這樣複雜的數據結構(它很好地打印出來)。請閱讀[sort](http://perldoc.perl.org/functions/sort.html)。並請下一次顯示你之前做過的事情「_gave up_」 – zdim
@zdim將在同一個'@ arr'上工作嗎?我的意思是說,如果我這樣說:1 @ arr = sort {(keys%$ a)[0] cmp(keys%$ b)[0]} @arr;'? – Adrian