Hans: Hash sortieren

Hi !

Folgendes:

my %alpha_hash;

$alpha_hash{"0"}="Hans";
$alpha_hash{"1"}="Peter";
$alpha_hash{"2"}="Klaus";

So, jetzt möchte ich gerne sortieren, um folgendes Ergebnis zu bekommen:

"2" => "Klaus"
"1" => "Peter"
"0" => "Hans"

Wie sieht die syntax aus, damit der Hash alphabetisch absteigend nach den VALUES sortiert wird?

Vielen Dank !

Gruß

Hans

  1. hi,

    $alpha_hash{"0"}="Hans";
    $alpha_hash{"1"}="Peter";
    $alpha_hash{"2"}="Klaus";

    So, jetzt möchte ich gerne sortieren, um folgendes Ergebnis zu bekommen:

    "2" => "Klaus"
    "1" => "Peter"
    "0" => "Hans"

    Ausgabe nach Values sortiert

    foreach $value( sort {$b <=> $a} values %alpha_hash){
            print "$value\n";
    }

    --roro

    1. Ausgabe nach Values sortiert

      foreach $value( sort {$b <=> $a} values %alpha_hash){
              print "$value\n";
      }

      LOL Perls herrliche Art die Dinge mit einem Einzeiler auf den Punkt zu bringen.

    2. mist hab ich geschrieben, tschuldigung,

      der Vergl. OP ist cmp für Zeichenketten, nicht das Spaceship <=> , das ist für Zahlen.

      ##################### run ...
      #!/usr/bin/perl

      use strict;
      my %alpha_hash;

      $alpha_hash{"0"}="Hans";
      $alpha_hash{"1"}="Peter";
      $alpha_hash{"2"}="Klaus";

      foreach my $key ( sort{$alpha_hash{$a} cmp $alpha_hash{$b}} keys %alpha_hash){
       print "$key => $alpha_hash{$key}\n";
      }

      print "\n ====================== \n";

      Ausgabe nach Values sortiert

      foreach my $value( sort {$a cmp $b} values %alpha_hash){
              print "$value\n";
      }

      --roro

      1. Hallo,

        Dabei hat sich der OP in einen Widerspruch verstrickt. Explizit meinter er dass er nach den Werten des Hashes sortieren möchte. Das Beispielergebnis jedoch lässt vermuten, dass er 'nur' die Schlüssel des Hashes absteigend sortieren will, also

        foreach my $key( sort {$b cmp $a} keys %alpha_hash){
           print "$key => $alpha_hash{$key}\n";
           }

        Grüße
          Klaus

        1. Hallo Klaus,

          nein das ist kein Widerspruch, nur Zufall. Ich brauche nur die Reihenfolge der Keys für den nach values sortierten Hash. Ich werde danach mit den keys aus dem Hash als Indizes auf verschiedene Arrays zugreifen. Somit brauche ich die sortierten Values nur um die richtige Reihenfolge der Array-Indizes zu bekommen !

          Gruß

          Hans

      2. Hi --roro !

        Super! Mit diesem Sortierkram und Hashes stehe ich halt noch auf Kriegsfuß. Ich war froh, daß mir Hashes als Lösungsmöglichkeit überhaupt eingefallen sind ;-)

        Gruß

        Hans

  2. Hi,

    musst dir den Code noch umschreiben - aber das Sortierverfahren solltest du benutzen können...in diesem Code wird nur der Index sortiert (so kann das Array bleiben wie es ist) kannst das natürlich auch direkt sortieren.

      
    int main()  
    {  
        int a[4],b[4],i,j,m,t;  
      
        cout << endl << "Bitte 4 Zahlen eingeben: " << endl;  
        for (i=0; i<4; i++)  
            {  
                cin >> a[i];  
                b[i] = i;  
            }  
      
        // Selection Sort  
        for (i=0; i<3; i++)  
        {  
            m=i;  
            for (j=i+1; j<4; j++)  
            {  
                if (a[b[j]]<a[b[m]])  
                    m=j;  
            }  
            t=b[i];  
            b[i]=b[m];  
            b[m]=t;  
        }  
        cout << endl << "Original-Array: " << a[0]    << " " << a[1]    << " " << a[2]    << " " << a[3];  
        cout << endl << "Index-Zugriff : " << a[b[0]] << " " << a[b[1]] << " " << a[b[2]] << " " << a[b[3]];  
      
        return 0;  
    }  
    
    

    Gruss
    Seppel

    1. Hallo,

      ungeachtet dessen, dass der OP ja einen Hash sortieren will und kein Array, würde ich trotzdem eher die Perl-Methode bevorzugen:

        
      @sortiertesArray = sort {$a <=> $b} @array  
      
      

      Markus

      --
      http://www.apostrophitis.at
      六 7東曲 人港ラ