2012-03-12 5 views
-4

나는 디렉터리의 모든 파일을 찾아 이름과 크기의 해시 배열을 만드는 프로그램을 가지고있다.펄에서 값으로 해시 배열을 정렬하려면 어떻게해야합니까?

예를

내가 크기의 내림차순으로 파일을 정렬하여 새 배열에 이름/값을 추가 할 수 있도록
%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}} keys % 파일; ' –

+0

완료해야합니다. 감사합니다 Devendra. – Borodin

+0

Borodin- Welcome –

관련 문제