Philipp Hasenfratz: gibts in PERL keine mehrdimensionalen Arrays?

Beitrag lesen

Halihallo Andreas

Ups, war ein Versehen ;-)

:-)

Juhuiii! Einer mehr im Boot ;-)

jajaja, aber noch kann ich auf mein PHP nicht verzichten, denn wie gesagt, in PERL bekomme ich einige Sachen nicht so ohne weiteres hin!

wird noch! ;)

my @preise = qw(50 100 150 75 30 80 300 225);

my @sorted = sort {$a<=>$b} @preise;
Was ist $a und $b? Wofür brauchst Du das? Was hat $a und $b für einen Wert?

$a und $b sind globale Variablen, die von sort benutzt werden. Du kannst durch die "subroutine" in {...} spezifizieren, _wie_ sortiert werden soll. $a und $b sind hierbei die einzelnen Elemente, die verglichen werden. Also

1 3 5 7 5 2

sort { $a <=> $b }

=> 1 <=> 3 = 1 => kleiner
=> 3 <=> 5 = 1 => kleiner
=> 5 <=> 7 = 1 => kleiner
...
=> 5 <=> 2 = 0 => grösser => umdrehen

=> 1 2 3 5 5 7

naja, ist wahrscheinlich etwas schneller implementiert...

so kannst du z. B. {uc($a) cmp uc($b)} verwenden, um Strings caseinsensitiv zu sortieren...

perldoc -f sort  !

Und noch ein Problem, wenn ichg denn jetzt einen "Mehrdimensionalen Array" habe, bekomme ich dann z.B. den ersten eindimensionalen Array über @tmp_array = @preise[1]?

Ne, wie Christian schon sagte, sind Arrays wirklich nur Listen mit einzelnen Werten. D. h. es gibt nur ein $preise[1], aber kein @(Array). Aber, du hast ja in $preise[1] eine Referenz auf ein Array und das kannst du dann "benutzen":

my $ptr = $preise[1];   # Pointer auf das Array
my @tmp = @{$ptr};      # Abbild des anonymen Arrays machen
                        # Achtung: Array in Adresse $ptr wird
                        # _nicht_ verändert.

oder

$ptr->[1] = 'Hasi';     # jetzt wird der index 1 des _anonymen_
                        # Arrays durch 'Hasi' ersetzt.

$i=0;
foreach(@preise){
    my @tmp_array = @preise[$i]
    my @sorted = sort {$a<=>$b} @tmp_array;
    my $minimal = shift @sorted;
    my $maximal = pop @sorted;
    $i++;
}

s. oben:

my @tmp_array = @{$preise[$i]}

Viele Grüsse

Philipp