if {dann sortieren nach x} else {sortieren nach dem y}
Torwächter
- perl
Hallo zusammen,
ich sortiere so:
for(sort {$upsortierennach{$b} <=> $upsortierennach{$a}} keys %upsortierennach)
und das funzt auch super bei Zahlen, doch nun mein Problem:
ich möchte bei Event A nach 1ner Zahl sortieren (if)
und bei Event B nach 2 Zahlen (elsif)
und bei Event C nach Buchstaben (else)
aber ich möchte den ganzen Block (for) nicht 3 (oder mehr)mal schreiben müssen.
aber so kann ich es ja nicht machen :
if(A)
{
for(sort...)
{
}
elsif(B)
{
for(sort...)
{
}
else
{
for(sort...)
{
}
BLOCK #Anweisungen aller Art
BLOCK #Anweisungen aller Art
BLOCK #Anweisungen aller Art
}
Und wie kann ich überhaupt nach Buchstaben (Namen von AAl bis Zorro)
sortieren ?
Ich bitte um eure Hilfe. Vielen Dank
Greetings
Torwächter
use Mosche;
ich sortiere so:
for(sort {$upsortierennach{$b} <=> $upsortierennach{$a}} keys %upsortierennach)
und das funzt auch super bei Zahlen, doch nun mein Problem:
ich möchte bei Event A nach 1ner Zahl sortieren (if)
und bei Event B nach 2 Zahlen (elsif)
» und bei Event C nach Buchstaben (else)
aber ich möchte den ganzen Block (for) nicht 3 (oder mehr)mal schreiben müssen.
for (sort deine_sort_sub keys %upsortierennach) {
###
}
sub deine_sort_sub {
if ($A) {
return $a <=> $b;
} elseif ($B) {
return $b <=> $a;
} else {
return $a cmp $b;
}
}
Und wie kann ich überhaupt nach Buchstaben (Namen von AAl bis Zorro)
sortieren ?
Standardmäßig (d.h., wenn du keinen Sortiercode vorgibst), sortiert Perl nach Zeichen (Buchstaben). Du kannst das aber explizit angeben mitdem 'cmp' Operator, der genauso zu verwenden ist wie der '<=>'-Operator, aber eben für Zeichen.
use Tschoe qw(Matti);
Hallo,
erstmal vielen Dank, funzt sehr gut.
Aber auch so ? :
sub readCookietoSort
{
if($FanArtCookie eq "s") # Autoren
{
return sort {$uppunkteB{$b} <=> $uppunkteB{$a}} keys %uppunkteB
}
elsif($FanArtCookie eq "p") # Stimmen
{
return sort {$uppunkteB{$b} <=> $uppunkteB{$a}} keys %uppunkteB
}
elsif($FanArtCookie eq "d") # Punkte
{
return sort {$uppunkteB{$b} <=> $uppunkteB{$a}} keys %uppunkteB
}
else # Durchschnitt
{
return sort {$uppunkteB{$b} <=> $uppunkteB{$a}} keys %uppunkteB
}
}
#---
for( readCookietoSort ) #<--- Beachte diese Zeilte
{
}
(ist zur Zeit alles die gleiche Anweisung aber es geht ja um die Funktion :) )
Danke im Voraus.
Greetings
Torwächter
use Mosche;
erstmal vielen Dank, funzt sehr gut.
Aber auch so ? :
for( readCookietoSort ) #<--- Beachte diese Zeilte
Ich denke nicht, dass das laufen wird, weil du die Funktion sort {} () nicht benutzt. Erst sort() belegt die Variablen $a und $b, deswegen musst du sie auch benutzen. Wenn du diese Funktion definierst, macht sie das gleiche wie
@arr = sort {
if ($A) {
return $a <=> $b;
#} elseif ($B) { ...
} else {
return $a cmp $b;
}
} @arr_unsorted;
use Tschoe qw(Matti);
die if..else Anweisung sollte doch mit "return" ebefalls das sort zurückgeben (beachte doch den oberen Block :) )
Oder nicht ?
Greetings
Torwächter
Hallo,
du hast mich auf die richtige Idee gebracht mit subs zu arbeiten.
ich mache es nun so:
if(A)
{
for{sort...)
{
dasblocksub()
}
}
else
.
.
.
Danke dir.
Greetings
Torwächter