Shadow: Sortieren von zwei Arrays die in Beziehung stehen

Hi Leute, ich habe zwei Arrays, die in Beziehung mit einnander stehen!
In einem Array sind die Punkte einer Person gespeichert in dem anderen der Name/Nick der Person. Jetzt will ich den einen Array sortieren, muss dabei aber auch den anderen sortieren und das ist mein Problem wie mach ich das, das die BEZIEHUNGEN so bleiben wie sie worher waren????
Die Array's haben außerdem eine undeffinierte Menge!!!

  1. Hi Leute, ich habe zwei Arrays, die in Beziehung mit einnander stehen!
    In einem Array sind die Punkte einer Person gespeichert in dem anderen der Name/Nick der Person. Jetzt will ich den einen Array sortieren, muss dabei aber auch den anderen sortieren und das ist mein Problem wie mach ich das, das die BEZIEHUNGEN so bleiben wie sie worher waren????

    ist es notwendig dafür 2 Arrays zu nehmen?

    Mit einem HASH würdest du es einfacher haben

    my %user;

    $user{'name'}->{punkte} = 100;
    $user{'name'}->{nick} = 'Shadow';
    ....

    my @keys = sort { $hash{$a}->{punkte} <=> $hash{$b}->{punkte}} keys %user;

    bzw ohne Umweg:
    foreach(sort { $hash{$a}->{punkte} <=> $hash{$b}->{punkte}} keys %user)
    {
    print $user{$_}->{nick} . $user{$_}->{punkte}
    }

    Ansonsten wird es nicht so einfach, da du dann von Hand sortieren musst bzw eine eigene sortierfunktion schreiben.

    Struppi.

    1. Ok, dann versuche ich das mal mit dem Hash

      1. Du musst einfach den zweiten Array entsprechend mitändern. Für Bubble-Sort würd das so aussehen:

        for($a=0;$a<(count($punkte)-1);$a++)
        {
           for($i=0;$i<(count($punkte)-1);$i++)
           {
             if($punkte[$i] > $punkte[($i+1)])
             {
               $hilfsvariable = $punkte[($i+1)];
               $punkte[($i+1)] = $punkte[$i];
               $punkte[$i] = $hilfsvariable;

        $hilfsvariable = $name[($i+1)];
               $name[($i+1)] = $name[$i];
               $name[$i] = $hilfsvariable;
             }
           }
        }

        Das Beispiel ist in PHP, wie du siehst, das ganze müsste aber eigentlich auch in Javascript und jeder anderen Programmiersprache gehen!

        1. Das Beispiel ist in PHP, wie du siehst, das ganze müsste aber eigentlich auch in Javascript und jeder anderen Programmiersprache gehen!

          Perl hat eine sehr schnelle Sortierroutine integriert, insofern ist es nciht nötig diese selber zu schreiben.

          Struppi.

    2. Leider klappt das ganze nicht so richtig, da das ganze nicht wirklich geordnet wird, von groß nach klein, sondern wilkürlich!!!
      Wie mach ich es, das es nicht wilkürlich geordnet wird, sondern von Punktezahl abhängig von oben nach unten???

      1. Leider klappt das ganze nicht so richtig, da das ganze nicht wirklich geordnet wird, von groß nach klein, sondern wilkürlich!!!
        Wie mach ich es, das es nicht wilkürlich geordnet wird, sondern von Punktezahl abhängig von oben nach unten???

        use strict;
        my %user;

        $user{name1} = { nick => 'n1', punkte => 10};
        $user{name2} = { nick => 'n2', punkte => 101};
        $user{name3} = { nick => 'n3', punkte => 100};
        $user{name4} = { nick => 'n4', punkte => 111};
        $user{name5} = { nick => 'n5', punkte => 99};

        foreach( sort { $user{$a}->{punkte} <=> $user{$b}->{punkte} } keys %user)
        {
        printf "Name: %3s pkt:%5d\n", $user{$_}->{nick}, $user{$_}->{punkte};
        }

        Wenn du es umgekehrt machen willst musst du $a und $b vertauschen.

        Struppi.

        1. Thx jetzt klappt's