получить все узлы из многоуровневого хэша в Perl

0

Я хочу, чтобы все узлы каждого ключа сортировались по ключу в хэш-рефеере или массиве или что-то вроде того, что я могу повторять это в соответствии с моей потребностью, так как я должен отображать каждый ключ со всеми его дочерними элементами. следующая моя структура данных:

 $hash1 = {
          '3' => {                  

                   'title' => 'Parent-3', 
                    'parentid' => '-1'               
                 },
          '1' => {

                   'children' => {
                                   '11' => {                                           
                                             'title' => 'child-1',                                            
                                           },
                                   '5' => {

                                            'children' => {
                                                            '8' => {                                                                   
                                                                     'title' => 'first child of child-2',                                                                    
                                                                   },
                                                            '13' => {                                                                     
                                                                      'title' => 'second child of child-2',                                                                    
                                                                    }
                                                          },
                                            'title' => 'child-2',                                          
                                          }
                                 },
                   'title' => 'Parent-1', 
                    'parentid' => '-1'                
                 },
          '2' => {                 
                   'title' => 'Parent-2',  
                    'parentid' => '-1'              
                 },
          '4' => {                 
                   'title' => 'Parent-4',
                   'parentid' => '-1'
                 },
        };

Я использовал следующие функции:

sub Options {

    my $hash = shift;
    my $options = '';

    my $iter; $iter = sub {     
        my $hash = shift;
        my $indent = shift || '';
        foreach my $k (sort {$a <=> $b} keys %{$hash}) {            
            my $v = $hash->{$k};                
            if($v->{parentid} eq '-1'){
            $options .= $v->{title} ."-parent\n";           
            }else{
            $options .= $v->{title} . "," ;
            }
            if ($v->{children}){
                 $iter->($v->{children}, $indent . "");             
            }                   
        }
        chop($options);
        $options .= "\n";
    };

    $iter->($hash);     
    return $options;
}

здесь он возвращает строку с разделенной запятой, но мне нужна какая-то структура данных, так что я могу найти всех детей для каждого ключа (в форме хеш-ссылки или массива), например:

Parent-1 -> [child-1,child-2, first child of child-2, second child of child-2]
Parent-2
Parent-3
Parent-4

любой может мне помочь? заранее спасибо.

Теги:
validation
email
hashref

2 ответа

1

Если ваша цель состоит в отображении содержимого хэша, вы должны использовать модуль Data :: Dumper. Он может использоваться для печати структур данных произвольной сложности с хорошим форматом.

  • 0
    +1, нет необходимости тратить время на переосмысление колес. Data::Dumper , Data::Dump и другие подобные модули - самый быстрый способ достичь функциональности OP
0

Вы также можете найти ответ brian d foy при проверке наличия ключа полезного

Код с кодом для перехода к структуре данных и Data :: Diver может предоставить вам всю необходимую вам помощь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню