Avatar billede Lasse Novice
06. april 2000 - 17:16 Der er 3 kommentarer og
1 løsning

Sortere efter en hash og derefter efter en anden

Jeg har to hashes hvorved nøglen til dem begge er den samme(et fodboldhold). Den ene hash indeholder antal point for holdet, den anden, den samlede målscore for holdet. Det er meningen at jeg vil sortere nøglerne(fodboldholdenes navne) på baggrund af værdierne(key/value). Først skal der sorteres efter point, og derefter skal der sorteres efter målscore. To eller flere hold kan jo nemt have det samme antal point i en turnering.

Det er meningen at jeg skal have holdet at arbejde med i en foreach statement og hverken point eller måslcore for holdet.

Eks:

Hold        Point  Målscore
AB          6      12
Herfølge    6      6
FCK        0      -6
AAB        0      -12

Jeg takker for alle svar på forhånd!
Avatar billede erikjacobsen Ekspert
06. april 2000 - 17:54 #1
%hold = ('AGF',12,'FCK',12,'OB',6,'Esbjerg',0,'Aabenraa',0);
%scor = ('AGF',4,'FCK',2,'OB',0,'Esbjerg',-2,'Aabenraa',-40);
foreach $h (sort {$hold{$b}*1000+$scor{$b}<=>$hold{$a}*1000+$scor{$a}} keys(%hold)) {
  print "$h: $hold{$h} $scor{$h}\n";
}

Dette er vist det nemmeste. Hvis målscore overstiger 1000 skal du nok gange
med 10000 i stedet for.
Avatar billede erikjacobsen Ekspert
06. april 2000 - 18:01 #2
Ok, hvis målscor går ud over -499 til +499 skal du bare gange med et større tal.
Avatar billede Lasse Novice
06. april 2000 - 18:19 #3
Ok, du er for SEJ, TAK skal du have for svaret!

Jeg prøver at forstå det du gør, men jeg kan ikke greje hvor $a og $b kommer fra. Har du tid og lyst til lige at skrive et par visdomsord om det???

Anyway, tak for svaret, det var endnu engang perfekt
Avatar billede erikjacobsen Ekspert
06. april 2000 - 19:10 #4
$a og $b er ren magi. De opstår fordi "sort" laver dem.

I 3. linie er koden: {$hold{$b}*1000+$scor{$b}<=>$hold{$a}*1000+$scor{$a}}  en anonym
funktion, der afleverer -1, 0 eller 1 som "sort" bruger til sammenligningen. Da sådan
en sammenligning skal være effektiv bruges ikke den "normale" parameteroverførsel,
men i stedet for de magiske variabler $a og $b.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester