Portál AbcLinuxu, 13. července 2025 22:34


Dotaz: Perl - serazeni hashe

5.5.2011 19:18 motorcb | skóre: 12
Perl - serazeni hashe
Přečteno: 228×
Odpovědět | Admin

Zdravim.

Mam nasledujici hash, ktery bych chtel seradit sestupne podle velikosti vzdalenosti. Nevedel by nekdo jak na to??? Diky za kazdou radu

#!/usr/bin/perl

%vzdalenosti = (
"Amsterodam" => 970,
"Moskva" => 1900,
"Koda" => 750,
"Rim" => 1300,
"Varsava" => 630,
);


while (($mesto, $vzdalenost) = each(%vzdalenosti)){
print "$mesto - $vzdalenost\n";
}

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

5.5.2011 20:32 myšák | skóre: 26 | blog: EmentuX | Ostrava
Rozbalit Rozbalit vše Re: Perl - serazeni hashe
Odpovědět | | Sbalit | Link | Blokovat | Admin
Myslíte takhle nějak?
#!/usr/bin/perl -w


sub hashComp {
   $vzdalenosti{$a} <=> $vzdalenosti{$b};
}

%vzdalenosti = (
"Amsterodam" => 970,
"Moskva" => 1900,
"Koda" => 750,
"Rim" => 1300,
"Varsava" => 630,
);


foreach $key (sort hashComp (keys(%vzdalenosti))) {
   print "$key - $vzdalenosti{$key}\n";
}
Je nesmírně těžké být idiotem, konkurence je obrovská...
wamba avatar 5.5.2011 20:55 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Perl - serazeni hashe
Odpovědět | | Sbalit | Link | Blokovat | Admin
use warnings;
use strict;
use 5.010;

my %vzdalenosti = (
    'Amsterodam' => 970,
    'Moskva'     => 1900,
    'Koda'       => 750,
    'Rim'        => 1300,
    'Varsava'    => 630,
);

my @serazena_mesta =
  sort { $vzdalenosti{$b} <=> $vzdalenosti{$a} } keys %vzdalenosti;

foreach my $mesto (@serazena_mesta) {
    say "$mesto - $vzdalenosti{$mesto}";
}

This would have been so hard to fix when you don't know that there is in fact an easy fix.
6.5.2011 01:07 buff | skóre: 10 | blog: buff
Rozbalit Rozbalit vše Re: Perl - serazeni hashe
Odpovědět | | Sbalit | Link | Blokovat | Admin
RTFM ;-) perlfaq: How do I sort a hash?
10.5.2011 00:44 VM
Rozbalit Rozbalit vše Re: Perl - serazeni hashe
Odpovědět | | Sbalit | Link | Blokovat | Admin
map {print "$_ - $vzdalenosti{$_}\n";} sort {$vzdalenosti{$a} <=> $vzdalenosti{$b}} keys %vzdalenosti;

(keys vybere jmena mest, sort seradi dle vzdalenosti, map print vypise)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.