Как отсортировать хэш хэшей по значению, используя perl? - PullRequest
4 голосов
/ 12 января 2011

У меня есть этот код

use strict;
use warnings;

my %hash;
$hash{'1'}= {'Make' => 'Toyota','Color' => 'Red',};
$hash{'2'}= {'Make' => 'Ford','Color' => 'Blue',};
$hash{'3'}= {'Make' => 'Honda','Color' => 'Yellow',};

foreach my $key (keys %hash){       
  my $a = $hash{$key}{'Make'};   
  my $b = $hash{$key}{'Color'};   
  print "$a $b\n";
}

И это выход:

Тойота Ред Хонда Желтый Форд Блю

Нужна помощь в сортировке по марке.

Ответы [ 3 ]

10 голосов
/ 12 января 2011
#!/usr/bin/perl

use strict;
use warnings;

my %hash = (
    1 => { Make => 'Toyota', Color => 'Red', },
    2 => { Make => 'Ford',   Color => 'Blue', },
    3 => { Make => 'Honda',  Color => 'Yellow', },
);

# if you still need the keys...
foreach my $key (    #
    sort { $hash{$a}->{Make} cmp $hash{$b}->{Make} }    #
    keys %hash
    )
{
    my $value = $hash{$key};
    printf( "%s %s\n", $value->{Make}, $value->{Color} );
}

# if you don't...
foreach my $value (                                     #
    sort { $a->{Make} cmp $b->{Make} }                  #
    values %hash
    )
{
    printf( "%s %s\n", $value->{Make}, $value->{Color} );
}
4 голосов
/ 12 января 2011
print "$_->{Make} $_->{Color}" for  
   sort {
      $b->{Make} cmp $a->{Make}
       } values %hash;
3 голосов
/ 12 января 2011

plusplus это правильно ... массив хеш-ссылок, вероятно, лучший выбор структуры данных.Это также более масштабируемо;добавить больше машин с push:

my @cars = (
             { make => 'Toyota', Color => 'Red'    },
             { make => 'Ford'  , Color => 'Blue'   },
             { make => 'Honda' , Color => 'Yellow' },
           );

foreach my $car ( sort { $a->{make} cmp $b->{make} } @cars ) {

    foreach my $attribute ( keys %{ $car } ) {

        print $attribute, ' : ', $car->{$attribute}, "\n";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...