| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Aug 2002 Ort: Schweiz
Beiträge: 41
| Array mit Sonderzeichen sortieren
Ich hab ein Array mit Namen, z.B. von Städten. Nun möcht ich das alfabetisch sortieren, aber diejenigen Namen mit "Ä, Ü, Ö, ç, ó, é, ä, ö, Å" etc. werden nicht richtig eingeordnet. Hat jemand eine Idee, wie ich eine function bauen könnte, die das Array auch mit solchen Zeichen richtig sortiert? Und zwar ohne dass die Namen umgeschrieben werden müssen. Für irgendwelche Anregungen herzlichen Dank. Fritz |
| | |
| | #5 (permalink) |
| ... Registriert seit: Oct 2002 Ort: Nürnberg
Beiträge: 3.611
|
hab dir mal einen kl. prototype geschrieben: ActionScript:
|
| | |
| | #6 (permalink) |
| ... Registriert seit: Oct 2002 Ort: Nürnberg
Beiträge: 3.611
|
hier noch eine flexieblere variante: ActionScript:
Geändert von thorben.schmitt (27-12-2003 um 18:49 Uhr) |
| | |
| | #7 (permalink) |
| Neuer User Registriert seit: Aug 2002 Ort: Schweiz
Beiträge: 41
|
Hallo Thorben Na das nenne ich einen schnellen Service. Funktioniert so weit bestens. Allerdings löst es erst die eine Hälfte des Problems. Der Array wird nun zwar sauber sortiert ( die andern Zeichen, wie "ç, é, ó" etc. kann ich schon noch selbst hinzufügen), aber: ich muss die Namen zuletzt eben doch wieder mit den Umlauten anzeigen. Sie erscheinen in einer Listbox und da sieht es einfach schrecklich aus, wen es z.B. dann heisst: Aegaeische Inseln! Also müsste ich nun nach dem Sortieren die Umlaute wieder zurücksetzen. Wie das im Prinzip geht sehe ich schon, ich hab da nur ein kleines Porblemchen: beim replaceUmlaute machst du ja var tmp = this.split(""); d.h. jeder einzelne Buchstabe wird abgegrast und dann werden aus einem zwei gemacht. Beim Zurücksetzen ist es aber umgekehrt, aus zwei wird eins. Wie geht das dann? So:? var tmp = this.split(""""); oder: var tmp = this.split("",""); Naja, das bring ich schon noch irgendwie hin. Deine 2.Version ist ebenfalls gut. Wenn du grad noch ein wenig Zeit hättest und mir die noch umkehren könntest...? String.prototype.resetUmlaute... Auf jeden Fall erstmal allerherzlichsten Dank, das hat mir einen ganz schönen Haufen Zeit erspart. Ich wusste einfach gar nicht wo anfangen bei dem Problem. Schönen Abend noch und Gruss Fritz |
| | |
| | #8 (permalink) |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
|
Hallo Fritz, das kannst du erreichen, indem du beim Sortieren zwar die umgewandelten Bezeichnungen für den Vergleich benutzt, tatsächlich aber die Originalbezeichnungen sortierst. ActionScript:
mfg r.
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
| | #9 (permalink) |
| ... Registriert seit: Oct 2002 Ort: Nürnberg
Beiträge: 3.611
|
So, finito ActionScript:
Geändert von thorben.schmitt (27-12-2003 um 20:48 Uhr) |
| | |
| | #10 (permalink) |
| Neuer User Registriert seit: Aug 2002 Ort: Schweiz
Beiträge: 41
|
Hallo Thorben! Ja, jetzt gefällts mir! Ich musste noch eine kleine Schlaufe basteln, um den umgewandelten Array wieder abzuklappern: for (i=0; i<DingsN0.length; i++){ d0=DingsN0[i].converteUmlaute(0);} aber jetzt geigts mit den Umlauten. Was nicht geht, sind "Å, Ç, é, ó, ç". Aber damit werd ich mich glaub abfinden müssen, denn die zu verwandeln ginge ja noch, doch zurückstellen wird dann wohl doch zu kompliziert, wie würde man dann sagen, welche Zeichen einen Akzent bekommen? Vielleicht mit Bokels Variante, aber die gibt mir zunächst mal ein falsches trace (Öslo,Bärlin,Köln,Üstanbül) statt (Bärlin,Köln,Öslo,Üstanbül). Ich werd auch damit noch ein bisschen experimentieren. Aber erst morgen. Vielen Dank nochmal für die prompte Hilfe und schöne Grüsse aus der Schweiz Fritz |
| | |
| | #11 (permalink) |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
|
Hallo Fritz, die replaceUmlaute-Routine aus Thorbens Posting vor meinem brauchst du auch noch, damit es funktioniert. mfg r.
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
| | #12 (permalink) | |
| Level up Registriert seit: Jun 2001 Ort: Bocholt
Beiträge: 4.155
|
hmmm..., die letzten beiden Posts versteh ich nicht ganz, das gewünschte Ziel (sortieren eines Arrays bei Beachten der Umlaute ohne diese aus den array zu entfernen) war doch schon wunderbar mit diesen beiden funktionen erreichbar: thorbens repaceUmlaute und bokels vergleicheUnterBeachtungDerUmlaute (ok, am funktionsnamen könnte man noch arbeiten ;-) ) ...was danach kam, machte doch alles nur noch kompliziert denn: Zitat:
Gruß Alois Edit: hy bokel, noch wach?
__________________ -Spuckt mir auf den Stuhl, ich will im Grünen sitzen- Geändert von Alois (27-12-2003 um 23:28 Uhr) | |
| | |
| | #13 (permalink) | |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
| Zitat:
![]() Schöne Feiertage Alois, mfg r.
__________________ Ralf Bokelberg™ - Flex & Flash Consulting | |
| | |
| | #14 (permalink) |
| Neuer User Registriert seit: Aug 2002 Ort: Schweiz
Beiträge: 41
|
Guten Morgen miteinander. Sorry, ich war gestern nach ca 16 Stunden an der Kiste etwas ausgelutscht. Hab nun die Kombination Thorben/Bokel (replaceUmlaute/vergleicheUmlaute) durchgecheckt und das funktioniert einwandfrei, auch mit den "Å, Ç, é, ó, ç". Ein Schönheitsfehler: der Code ist sehr langsam. Bei Arrays mit bis zu 50 Elementen dauert es ca. 3-4 sec, aber ich hab einige Arrays drin mit über 200 Elementen, da geht es dann schon 14-16 sec oder der Player meldet gar , dass ihn ein Script verlangsamt. Das mag zwar auch daran liegen, dass ich ausser der Umlauterkennung auch noch andere Operationen an dem Array ausführe, doch die Verlangsamung tritt offensichtlich dann ein, wenn ich die Umlauterkennung aktiviere. Hier mal meine ganze Funktion: //auf einigen Buttons, mit denen man die Kategorie auswählen kann: function ArrDings(){ // alles zurücksetzen: MapsAus(); DingsN0.splice(0); DingsN.splice(0); Dings1.splice(0); // Kategorien feststellen (Städte, Länder, Flüsse, etc.): XMap=[Kategorie+"Map"]; XDings=[Kategorie+"Dings"]; _root[XDings].gotoAndStop(1); _root[XMap]._visible=true; // Array DingsN0 füllen: for (i=0; i<_root[XDings]._totalframes-1; i++) { name=_root[XDings][Kategorie].text; // z.B. Dänemark index=Kategorie+_root[XDings]._currentframe; //zB: C21 NamInd=name+":"+index; // "Dänemark:C21" DingsN0.push(NamInd); // ok _root[XDings].nextFrame(); } Jetzt sortieren: DingsN0.sort(vergleicheUmlaute); // hab den Namen etwas gekürzt // DingsN0 wieder teilen und in DingsN /Dings1 einfüllen: for (i=0; i<DingsN0.length; i++){ d1=DingsN0[i].split(":"); d2=d1.pop(); //index nach Dings1: Dings1.push(d2); d3=d1.shift(); //name nach DingsN DingsN.push(d3); } Liste(); // DingsN (Namen) in die Listbox füllen } Das ganze ist, wie man wohl schon vermuten kann, eine interaktive Europakarte, eine lokale Anwendung. Also: funktioniert, bloss eben etwas langsam. Kann man da was dagegen tun? Schönen Tag noch Fritz |
| | |
| | #15 (permalink) |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
|
Zur Steigerung der Geschwindigkeit sehe ich drei Möglichkeiten. Erstens kann man die Umlautkonvertierung beschleunigen, indem man die innere Suchschleife durch einen Hash ersetzt. Zweitens kann man das Zusammensetzen und Auseinandernehmen durch ein Objekt ersetzen. Und jetzt, wo wir sowieso schon ein Objekt haben, können wir drittens das Umwandeln aus der Vergleichsroutine rausnehmen und den umgewandelten Namen auch in dem Objekt speichern. Hier ist mal eine komplette Version. ActionScript:
Schöne Feiertage, mfg r.
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |