2013-01-16 2 views
0

이 해시를 이해하고 정렬로 처리하는 데 도움이 필요합니다.다차원 해시 정렬 - Perl

$VAR1 = { 

    Key1:Key1_si => { 

     'KeyA' => { 
      Keya => 'abcd, defg', 
      keyb => '1000', 
      keyc => '80%', 
      keyd => '2011.10.09', 
      keye => '1234-UR-DDDD', 
      keyf => 'rwh', 
      keyg => '600', 
      keyh => 'red', 
      keyi => '900', 
      keyj => '', 
      keyk =>'int4678_tt', 
     }, 

     'KeyB' => { 

      Keya => 'abcd, defg', 
      keyb => '2000', 
      keyc => '100%', 
      keyd => '2011.11.09', 
      keye => '1234-UR-DDDD', 
      keyf => 'rwh', 
      keyg => '500', 
      keyh => 'red', 
      keyi => '400', 
      keyj => '', 
      keyk =>'int4678_tt', 
     }, 
    }, 

}; 

질문 : 여기

는 해시 I 값 변화 'keyc'에 근거하여이 해시를 정렬 할. 그래서, 아래와 같은 기준으로 정렬 할 :

인쇄 :

Key1:Key1_si KeyB Keya keyd Keyc keyf 

Key1:Key1_si KeyA keya keyd Keyc keyf 
또한

Key1:Key1_si->KeyB->Keyc 

Key1:Key1_si->KeyA->keyc 

, 나는 같은 속성의 나머지와 함께 정렬 된 값으로 출력을 갖고 싶어

누군가가 위에서 언급 한 것처럼 정렬을 수행하기 위해 perl의 코드를 도와 주실 수 있습니까? 나는 너의 시간과 노력에 정말로 감사 할 것이다.

+3

해시는 정렬 할 수 없습니다. 선택한 순서대로 키를 반복함으로써 지정된 순서로 해시의 내용을 출력 할 수 있지만 해시 자체의 내용은 순서가 없습니다. 그것은 불확실한 순서의 가방입니다. –

+0

Perl을 아십니까? 우리는 문제를 해결하기 위해 최선을 다했지만 더 이상 진전 할 수는 없지만이 사이트는 무료 프로그래밍 서비스는 아닙니다. 적어도 시도한 것을 보여줄 수있는 코드를 보여 주어야합니다. – Borodin

+0

나는 2 개의 부호로 시도했다 : – user1985039

답변

3

키 쌍 목록을 정렬하려면 키 쌍 목록을 작성해야합니다. 배열에 대한 참조가 분명한 대답입니다. 일단이 사실을 알게되면 모든 것이 곧장 끝납니다. 키 그 정렬

my @unsorted_keys; 
for my $k1 (keys(%$VAR1)) { 
    for my $k2 (keys(%{ $VAR1->{$k1} })) { 
     push @unsorted_keys, [ $k1, $k2 ]; 
    } 
} 

: 키 목록을 구축

my @sorted_keys = sort { 
    my ($a_k1, $a_k2) = @$a; 
    my ($b_k1, $b_k2) = @$b; 

    (my $a_pc = $VAR1->{$a_k1}{$a_k2}{keyc}) =~ s/%//; 
    (my $b_pc = $VAR1->{$b_k1}{$b_k2}{keyc}) =~ s/%//; 

    $a_pc <=> $b_pc 
} @unsorted_keys; 

순회 정렬 키 이상 :

for (@sorted_keys) { 
    my ($k1, $k2) = @$_; 
    my $hash = $VAR1->{$k1}{$k2}; 
    ... do stuff with %$hash ... 
} 
+0

처음으로이 설명에 대한 감사의 말을 전합니다. 내가 이것을 시도하자. 그리고 내가 그것을 얻을 수 있는지 없는지에 관해 나는 이것 위에서 당신에게 앙갚음을 할 것이다. 도와 주셔서 감사 드리며 이해하게하겠습니다. – user1985039

+0

최상위 수준에 여러 개의 키가있을 수 있다고 가정합니다. 이렇게하면 단 하나만있는 경우 크게 단순화됩니다 (항상 'Key1 : Key1_si'가 아닐지라도). – ikegami

+0

예, key1 인 키가 여러 개 있습니다 (key1_s1). 나는 아직도 그것에 종사하고있다. 당신의 설명을 완전히 이행하면 돌아 오면 회신을 부탁드립니다. 그것은 정말로 당신의 매우 멋지다. 감사합니다, Krishna – user1985039