2016-03-31 5 views
1

У меня есть эта структура:Perl Сортировки Perl хэш хэша как структура значений

 '$self' => { 

     'stepTimePercentage' =>{ 

       'id12' => { 
        'percentage' => '1.00' 
        }, 
       'id15' => { 
        'percentage' => '30.00' 
        }, 
       'id4' => { 
        'percentage' => '20.00' 
        }, 
       'id9' => { 
        'percentage' => '15.00' 
        }, 
       } 

      } 

Я хочу, чтобы отсортировать эту структуру значений «процент». Я попробовал следующее, но я получил: «Использование неинициализированного значения в числовом сравнении (< =>)».

foreach my $key (sort{ $self->{stepTimePercentage}->{percentage}{$b} <=> $self->{stepTimePercentage}->{percentage}{$a} } keys %{$self->{stepTimePercentage}}) { 
    print "$key - $self->{stepTimePercentage}->{$key}->{percentage} % \n"; 
} 

Тогда я судимое это (и я получаю "Глобальный символ "$ ключ" требует явного имя пакета"):

foreach my $key (sort{ $self->{stepTimePercentage}{key}{$b} <=> $self->{stepTimePercentage}{$key}{$a}} keys %{$self->{stepTimePercentage}}) { 
    print ("$key - $self->{stepTimePercentage}->{$key}->{percentage} % \n"); 
} 
+0

Мой Perl очень ржавый, очень жаль, если это покинуть базу - вы можете использовать не-кавычки строковые литералы в поисках хешей? или должно быть '$ self -> {" stepTimePercentage "} -> {" percent "}'? – dwanderson

ответ

4

Вы почти там. Ключ вы сортировкой находится на втором уровне хэш-три уровня, так что вы хотите:

foreach my $key (sort { 
    $self->{stepTimePercentage}{$b}{percentage} 
     <=> 
    $self->{stepTimePercentage}{$a}{percentage} 
} keys %{$self->{stepTimePercentage}}) { 

    print "$key - $self->{stepTimePercentage}->{$key}->{percentage} % \n"; 

} 
+0

Спасибо большое! Мне было тяжело на это .. – user30771

+0

Теперь, что, если у меня на одном уровне с «процентом», другим элементом key-> value? так будет? – user30771