Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 06-01-2004, 12:11   #1 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Ort: Zürich, Schweiz
Beiträge: 75
Array "defragmentieren"

Hi!

Ich habe ein Array, welche zum Teil leere Elemente vorweist, da ich diese mit einer Funktion lösche.
Wie kann ich nun dieses Array nach der Funktion "defragmentieren", also die Elemente schön hintereinander anordnen ohne lästige leere Elemente?

greezzz
linuxkiller ist offline   Mit Zitat antworten
Alt 06-01-2004, 12:22   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Wenn du Strings als Datentypen in deinem Array hast, kannst du mit meinArray.sort() eine lexikalische Sortierung erreichen. Dadurch hast du die leeren Elemente alle am Ende der Arrayliste und kannst sie in einer Schleife mit pop() löschen.
  Mit Zitat antworten
Alt 06-01-2004, 12:24   #3 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Ort: Zürich, Schweiz
Beiträge: 75
Hmm, wichtig ist aber, dass die Reihenfolge beibehalten wird, also einfach ein "nachrutschen" der Elemente im Array. Sorry, hätte ich noch erwähnen sollen...
linuxkiller ist offline   Mit Zitat antworten
Alt 06-01-2004, 12:46   #4 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Dann hilft wohl nur Einsortieren in ein neues Array...
  Mit Zitat antworten
Alt 06-01-2004, 19:00   #5 (permalink)
dummschnack
 
Benutzerbild von Chino
 
Registriert seit: Mar 2002
Ort: Essen
Beiträge: 1.778
Hi!

Ich fände es sinnvoller, die Elemente so zu löschen, dass erst gar keine Lücken entstehen.

Poste doch mal die Löschfunktion und ein Bsp. wie dein Array aussieht. Da kann man bestimmt was machen.

Gruss, Chino
__________________
» flashbored since 2006
» my band: radioghost
Chino ist offline   Mit Zitat antworten
Alt 06-01-2004, 22:15   #6 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.347
würde auch vorschlagen, daß du mal ne beispiel-fla postest
cya, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar ist offline   Mit Zitat antworten
Alt 06-01-2004, 22:38   #7 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
hmm ich frag mich wie du des hinkriegst
sogar ein
delete array[id] löscht nen element sauber raus

siehts bei dir so aus?
ActionScript:
  1. x=[1,2,3,4,5,6]
  2. x[3]=""
  3. //so siehts array aus
  4. //x=[1,2,3,,5,6]
  5.  
löscht du elemente mit nem leeren string ?
sofern leere string oder ein paar undefined dein array defragmentieren kannste das so machen
ActionScript:
  1. y=x.join(",").split(",,").join(",").split(",")
  2. //nun siehts so aus
  3. //x=[1,2,3,5,6]
  4.  

grüße
deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 06-01-2004, 22:50   #8 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.298
ActionScript:
  1. textary = ["h","a"," ",0,"l","l","o"];
  2.  
  3. function defragarray (ary,empty){
  4. for(var i=0; i<ary.length; i++){
  5.     for(var a=0; a<empty.length; a++){
  6.         if(ary[i] == empty[a]){ ary.splice(i,1); }
  7.     }
  8. }
  9. return ary;
  10. }
  11.  
  12.  
  13. textary = defragarray(textary,[" ","",0]);
  14. trace(textary);



@deluxe: bei mir bleibt bei delete immer ein "" zurück.
__________________
--- :P ---

Blog
Bei unerwünschten Nebenwirkungen zerreißen Sie die Packungsbeilage oder erschlagen ihren Arzt oder Apotheker

Geändert von _geo_ (06-01-2004 um 22:52 Uhr)
_geo_ ist offline   Mit Zitat antworten
Alt 06-01-2004, 23:22   #9 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
achso
jetzt
ich dachte nur an leere einträge
er meint die nummerierung..
ja des geht ähnlich nen concat erstellt nen "vollständig" indiziertes array mit leeren einträgen die man wie o.g. enfternt:

ActionScript:
  1. t=["hallo","du","wie","gehts"]
  2. delete t[2]
  3. t[2] ist leer, length noch 4
  4. t=t.concat().join(",").split(",,").join(",").split(",")
  5. //length ist nun 3 -also ordentlich indiziert
  6.  

deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 07-01-2004, 00:24   #10 (permalink)
anyway
Gast
 
Beiträge: n/a
Aber wieso dann nicht gleich den kompletten Index rauskicken

ActionScript:
  1. // einerseits
  2. arr = ["ganz","schön","kompliziert"];
  3. arr.splice(1,1);
  4. trace(arr);
  5. // andereseits
  6. arr = ["","ganz","","","","","","schön","","kompliziert"];
  7. laenge = arr.length;
  8. while(laenge--) {
  9. if (arr[laenge]=="") arr.splice(laenge,1);
  10. }
  11. trace(arr);


anyway.
  Mit Zitat antworten
Alt 07-01-2004, 01:08   #11 (permalink)
_//\\#//\\_
 
Benutzerbild von warrantmaster
 
Registriert seit: Jan 2003
Beiträge: 7.060
@anyway

warrantmaster ist offline   Mit Zitat antworten
Alt 07-01-2004, 08:58   #12 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.298
@ anyway: Die Vielfalt macht das leben aus
__________________
--- :P ---

Blog
Bei unerwünschten Nebenwirkungen zerreißen Sie die Packungsbeilage oder erschlagen ihren Arzt oder Apotheker
_geo_ ist offline   Mit Zitat antworten
Alt 07-01-2004, 13:35   #13 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
hmm da hat der anyway recht
btw meine version funzt garnicht richtig
die trennzeichen summieren sich leider auf
brauche auch ne schleife *grml

von der speed her wäre die möglichkeit ohne schleife unschlagbar
mit weiß ich nicht

grüße
deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 08-01-2004, 13:17   #14 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Ort: Zürich, Schweiz
Beiträge: 75
danke für die antworten... ich hab's mir schon selber geproggt welches mir genügt

ActionScript:
  1. // "Defragmentiert" ein Array
  2. // Wenn gelöschte Elemente (undefined) vorhanden sind,
  3. // werden diese entfernt und der Rest "nachgerutscht".
  4. function array_defrag(standard) {
  5.     var array_backup = standard.array_copy();
  6.     for (var l = 0; l < array_backup.length; l++) {
  7.         standard[l] = new Array();
  8.         for (var m = 0; m < array_backup[l].length; m++) {
  9.             if (array_backup[l][m] != undefined) {
  10.                 standard[l].push(array_backup[l][m]);
  11.             }
  12.         }
  13.     }
  14.     return standard;
  15. }

greezzz
linuxkiller ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele