How to sort hash hashes by value using perl?

I have this code

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"; } 

And here it is:

Toyota Red Honda Yellow Ford Blue

Need help sorting by Make.

+4
source share
3 answers
 #!/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} ); } 
+10
source
 print "$_->{Make} $_->{Color}" for sort { $b->{Make} cmp $a->{Make} } values %hash; 
+4
source

plusplus is right ... the hashrefs array is probably the best choice of data structure. It is also more scalable; add more cars with 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"; } } 
+3
source

Source: https://habr.com/ru/post/1335284/


All Articles