2017-02-23 15 views
-2

ハッシュの配列をハッシュキーでソートしたいのですが、どうすればそれをPerlで行うことができますか? 構造は次のように作成されます。ハッシュの配列をハッシュ名でソートするにはどうすればよいですか?

push (@{$structure[$endpoint][1]}, \%temp_hash);
%temp_hashkey->valueを持つ単純なハッシュです。 そして今、私は、各ハッシュで唯一のキー - >値がある...すでに2時間のためにそれと戦って、私はあきらめられて、キーハッシュによってその配列をソートしたい...

+0

をすでに試したし、動作していないものを示しているが、完全な最小限の例を示してください。 – stevieb

+0

配列を引き出します(構文を分かりやすくするために)。次に 'my @ sorted = sort {(keys%$ a)[0] cmp(keys%$ b)[0]} @arr;'。配列内に1対のハッシュを持つのはちょっと厄介なようです...おそらくあなたは問題があるのでしょう。 [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

同じアレイに保存できますか? (キー%$ b)[0]} @ {$構造[$終点] [1]}; ' – Adrian

+0

私が意味することは、構造体を保持して並べ替えることです。 – Adrian

+0

同じ変数に割り当てることができます。 –