2017-02-23 72 views
-2

我想用散列鍵對散列數組進行排序,我怎麼能在Perl中做到這一點? 結構創建這樣的:如何通過哈希名稱對散列數組進行排序?

push (@{$structure[$endpoint][1]}, \%temp_hash);
%temp_hash是一個簡單的散列與key->value。 現在我想作爲排序依據的哈希鍵數組,還有在每個哈希只有一個鍵 - >價值......它一直在爭取2小時已經和我放棄了..

+0

請出示一個完整的,但小例子演示你已經嘗試過,是行不通的。 – stevieb

+0

將數組拉出(只是爲了簡化語法),然後'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

+0

@zdim將在同一個'@ arr'上工作嗎?我的意思是說,如果我這樣說:1 @ arr = sort {(keys%$ a)[0] cmp(keys%$ b)[0]} @arr;'? – Adrian

回答

1

嘗試

@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]); 
} 
+0

我可以將它存儲在同一個陣列中嗎? {$ structure [$ endpoint] [1]} = sort {(keys%$ a)[0] cmp(keys%$ b)[0]} @ {$ structure [$ endpoint] [1]}; ' – Adrian

+0

我的意思是我想保留結構並對其進行排序 – Adrian

+0

您可以將其分配回同一變量,是的。 –

相關問題