2013-12-11 3 views
-2

해시 참조의 배열 참조 (0 개 이상의 해시 참조 수준)의 해시입니다. 리프 노드 위의 레벨은 요소가 하나만있는 경우에도 항상 배열 참조입니다.Perl 동적 해시 탐색

해시 심판의 순서 (삽입 순서대로)를 유지하여 VALUE (배열 참조 배열에서)의 집계 합계를 가져와야합니다.

예 :

1)

(
    A => { 
      A1 => [ 
       { VALUE => 10 }, 
       { VALUE => 20 } 
      ], 
      B1 => [ 
       { VALUE => 30 } 
      ], 
     }, 
    B => { 
      A1 => [ 
       { VALUE => 10 } 
      ], 
      B1 => [ 
       { VALUE => 5 } 
      ], 
     }, 
    C => { 
      A1 => [ 
       { VALUE => 100 } 
      ], 
     }, 
) 

The required output of the above structure will be - 

(
    [A, A1, 30], 
    [A, B1, 30], 
    [B, A1, 10], 
    [B, B1, 5], 
    . 
    . 
    . 
    . 
) 

2)

(
    A => [ 
      { VALUE => 10 }, 
      { VALUE => 20 } 
     ], 
    B => [ 
      { VALUE => 30 } 
     ], 
)  

The required output of the above structure will be - 

(
    [A, 30], 
    [B, 30] 
) 
+2

"해시 참조의 순서를 유지함으로써 무엇을 의미합니까?" 그들이 삽입 된 순서? 알파벳순으로 주문 했습니까? 다른 것? – ThisSuitIsBlackNot

+0

함수 ref()를 사용하여 참조 유형을 결정해야합니다. 해시의 키에는 삽입 순서와는 별도로 자체 순서가 있습니다. sort (keys (% {$ hash_ref}))를 사용할 수 있습니다. – alex

+0

@ThisSuitIsBlack 아니요. 삽입 순서입니다. –

답변

1

당신은 당신의 해시 구조를 걸어 필요한 금액을 계산하는 함수를 작성해야합니다. 이 키의 값이 목록 심판 인 경우,

  • 이 목록의 해시에서 VALUE 요소를 요약하고 [키, 합계를 반환 : 해시에서 각 키의 경우,이 결정을 내릴 필요 ]

  • 이 해시의 값이 해시 참조 인 경우 해당 해시를 반복합니다. 목록을 가져온 경우 현재 출력에 추가하고 계속 진행하십시오.

  • 최상위 (깊이 0)에서 반환되는 각 목록을 인쇄하십시오.

아직 해결해야 할 세부 사항이 많이 있지만, 올바른 방향으로 시작해야합니다.