2014-11-19 1 views
3

좋아, 필자가 수집 한 값의 해시가 있으며 (전체적으로 별도의 프로그램에서) 모두 가지고있는 펄 프로그램이 있습니다. 이 Perl 스크립트에 제공됩니다. 이 해시는 (문자열, 문자열)의 해시입니다.키, 값, 키 AND 값에 의한 기본 Perl 해시 정렬

값을 3 가지 방식으로 정렬하고 싶습니다. 우선, 키순으로 정렬하고 싶습니다. 이 방법이 쉽다는 것을 알았습니다. Perl의 정렬 함수를 사용하고, 키를 반복하고, 정렬 할 때 각각의 것과 함께 인쇄/저장/모든 것을 생각하는 방식과 똑같은 방식으로 생각했습니다.

foreach my $name (sort keys %planets) { 
    printf "%-8s %s\n", $name, $planets{$name}; 
} 

둘째, 값순으로 정렬하고 싶습니다. 다시 말하지만,이 쉽고, 이상 정렬 기능과 루프를 사용

foreach my $name (sort { $planets{$a} <=> $planets{$b} } keys %planets) { 
    printf "%-8s %s\n", $name, $planets{$name}; 
} 

셋째, 내 질문은 어떻게 종류의 가치에 의하여, 그러나 할 두 개의 키 사이의 값의 모든 관계를 들어, I 종류 먼저 더 큰 어시스턴트 키를 가진 값을 빼내십시오. 예 : ||와 체인 여러 비교를 넥타이에

Red => 50 
Yellow => 75 
Blue => 75 

is sorted to this, since 'Yellow' is greater asciibetically than 'Blue' 
Red 50 
Blue 75 
Yellow 75 

답변

10

는 비교 연산자는 0을 반환합니다, 그래서 당신은 할 수 있습니다

sort { $planets{$a} <=> $planets{$b} || $a cmp $b } 
+0

을 이봐, 지금에서 살펴 본다. 귀하의 답변을 읽고 고려 중입니다! – Musicode