2012-03-12 16 views
-4

私は、ディレクトリ内のすべてのファイルを見つけ、その名前とサイズのハッシュ配列を作成するプログラムを持っています。perlでハッシュ配列を値でソートするにはどうすればよいですか?

%files = ("file1" => 10, "file2" => 30, "file3" => 5); 

私はサイズの降順でファイルをソートして、新しい配列に名前/値を追加できるようにしたいです。

%filesSorted = ("file2" => 30, "file1" => 10, "file3" => 5); 

私は値で配列をソートしてから値を印刷するための多くの方法を発見したが、それは私が欲しいものではありません。

+1

を使用してポイントを示しています。ハッシュは本質的にソートされていません。あなたの '%files'と'%filesSorted'は等価です。 '%filesSorted =%files;'を書くだけで同じ効果が得られます。 – ruakh

+0

可能な複製[perlのハッシュの値に基づいてソートする簡単な方法](http://stackoverflow.com/questions/5972224/the-simple-way-to-sort-based-onues-in- a-hash-in-perl) –

+0

ようこそStackOverflowへ。新しい質問を投稿する前に検索(またはGoogle)を使用してください。多くの人がすでに尋ねられ答えられています。 –

答えて

6

の配列にファイルの名前をソート順に並べる必要があります。 Perlハッシュとは異なり、配列は順序付けされ、順序は保持されます。このコードは、独自のデータ

use strict; 
use warnings; 

my %files = (file1 => 10, file2 => 30, file3 => 5); 

my @sorted = sort { $files{$b} <=> $files{$a} } keys %files; 

foreach my $file (@sorted) { 
    print "$file => $files{$file}\n"; 
} 

OUTPUT意味がありません

file2 => 30 
file1 => 10 
file3 => 5 
+0

Borodin - 出力とコードを修正します。降順である必要があります。それは 'sort {$ files {$ b} <=> $ files {$ a}}キー%ファイル;' –

+0

'である必要があります。ありがとうDevendra。 – Borodin

+0

Borodin-Welcome –

関連する問題