Clanintern Clanintern Clanintern

Forum

Öffentliche Foren
FORUM: Spiele & Computer THEMA: Array elegant sortieren
AUTOR BEITRAG
deluxe *acetalisiert*

RANG Master of Clanintern

#1 - 18.05 17:20

Im moment benutze ich folgende Funktion:
code:
function strluxcmp ($a, $b){

 if(strnatcmp($a, $b) > 0) 
   return -1;
 elseif(strnatcmp($a, $b) < 0) 
   return 1;
 else 
   return 0;
            
}


Diese kehrt mir die Funktionalität von strnatcomp um, weil ich per usort DESC sortiern will .

Ich frag mich aber ob das nicht eleganter geht weil irgendwie find ich das
Crush (sexy shoeless god of war)

RANG Deckschrubber

#2 - 18.05 18:01

Wenn du die Funktionalität umkehren willst, wie wäre es dann mit:

return strnatcmp($a, $b) * -1;

Wenn der Sortieralgorithmus seine Vergleichsfunktion nur boolean verwendet, dann erreichst du eventuell mit

return !strnatcmp($a, $b);

dasselbe Ergebnis mit weniger CPU Takten.


By the way: Welche Sprache ist das überhaupt?
horst

RANG Prophet of Clanintern

#3 - 18.05 18:10

sieht sich nach php aus?
Crush (sexy shoeless god of war)

RANG Deckschrubber

#4 - 19.05 00:44

In dem Fall:
return strnatcmp($a, $b) * -1;
deluxe *acetalisiert*

RANG Master of Clanintern

#5 - 19.05 14:21

öhm ja *hust*... das kehrt mir zumindest strnatcmp eleganter um
*al!ve* - Vorbereitung aufs Urlaubssemester

RANG Master of Clanintern

#6 - 19.05 15:30

Und was wenn nicht das willst du, wenn du usort verwenden willst?
horst

RANG Prophet of Clanintern

#7 - 20.05 13:44

Noch komplizierter kann man sich nicht ausdrücken ,oder?
poky *geisteskranke Sensation*

RANG God

#8 - 20.05 15:39

Goli´s post versteh ich nicht
*al!ve* - Vorbereitung aufs Urlaubssemester

RANG Master of Clanintern

#9 - 20.05 19:55

In #1 war sowohl gefordert, dass mittels usort sortiert werden soll, als auch, dass das Kriterium die Umkehrung von strnatcmp ist. Da ist nun mal das von Crash in #4 geschriebene die vermutlich schnellste Lösung. Deshalb ist #5 als Kritik an der Umkehrung von strnatcmp unpassend, weil diese Umkehrung Teil der Anforderung war.
Crush (sexy shoeless god of war)

RANG Deckschrubber

#10 - 20.05 21:27

Man könnte natürlich auch das Array normal mit strnatcmp sortieren und dann array_reverse($array) anwenden.

Alternativ zu usort mit strnatcmp kann man übrigens auch einfach natsort($array) oder natcasesort($array) (nicht case-sensitive Version) benutzen.
deluxe *acetalisiert*

RANG Master of Clanintern

#11 - 21.05 11:57

War nicht als Kritik an der Umkehrung zu verstehn... zugegeben das Wörtchen "zumindest" war nicht ganz passend und auch #1 beschreibt das was ich will vielleicht net optimal....ich bin auch offen für Vorschläge wie man das ingesamt anders machen kann. #1 war mehr ne Beschreibung wie ich das gemacht hab, weniger die Vorraussetzung, dass es so gemacht werden muss.

Ich führ das mal kurz weiter aus:
Es geht um ein Array das so (nur a bissle größer) aufgebaut is:

$a[] = array("a" => 10, b => "a");
$a[] = array("a" => 5, b => "b");
$a[] = array("a" => 6, b => "c");
$a[] = array("a" => 3, b => "d");
$a[] = array("a" => 8, b => "d");

$a soll nu nach "a" absteigend sortiert werden (nat. Sortierung).
marinE

RANG Deckschrubber

#12 - 05.06 12:29

code:
foreach($a as $b)$c[]=$b["a"];
natsort($c);
foreach($c as $d=>$e)$f[]=$a[$d];
$a=array_reverse($f);


oder etwas besser lesbar:

code:
foreach($a as $aValue){
    $hilfsArray[] = $aValue["a"];
}

natsort($hilfsArray);

foreach($hilfsArray as $hilfsArrayKey => $hilfsArrayValue){
    $endArray[] = $a[$hilfsArrayKey];
}

$a = array_reverse($endArray);