Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 02-12-2011, 15:47   #1 (permalink)
Neuer User
 
Registriert seit: Aug 2011
Beiträge: 16
Reihenfolge von Array-Elementen

Hi!

Es geht um Arrays. Wenn ich in einer for-each-Schleife einen Array durchlaufe, in welcher Reihenfolge kommen dann die Elemente? Ist das prinzipiell undefiniert oder gibt es dazu bestimmte Regeln?

Ich habe nämlich einen Fall, wo diese Reihenfolge weder nach ansteigenden Indizes geht (zuerst kam Index 256, dann 1, dann 259, dann 4,...), noch nach der Reihenfolge in der die Elemente zum Array hinzugefügt wurden.

Würde mich über eine Antwort freuen. Wenn nämlich die Reihenfolge beim Durchlauf der for-each-Schleife nicht "vorhersehbar" ist, dann müsste ich das im Code anders lösen.

lg,
ZerNot
ZerNot ist offline   Mit Zitat antworten
Alt 02-12-2011, 16:09   #2 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.041
das ist undefiniert, steht auch so in der Hilfe.
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist offline   Mit Zitat antworten
Alt 07-12-2011, 09:54   #3 (permalink)
Neuer User
 
Registriert seit: Aug 2011
Beiträge: 16
Hast du einen Link wo das genau steht? Ich konnte es in der doku nicht finden.

Wie sieht's mit Vektoren aus? Ist da die Reihenfolge beim durchiterieren mit for-each definiert?

lg,
ZerNot
ZerNot ist offline   Mit Zitat antworten
Alt 07-12-2011, 10:10   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
? In einem Array undefiniert? Arrays sind dich indiziert?
Omega Psi ist offline   Mit Zitat antworten
Alt 07-12-2011, 10:39   #5 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.041
Adobe ActionScript 3.0 * Looping

Zitat:
(object properties are not kept in any particular order, so properties may appear in a seemingly random order)
Steht nur bei der for..in Schleife so explizit dabei.
Ich kann mir aber nur schwer vorstellen warum das bei der for each..in anders sein sollte.
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist offline   Mit Zitat antworten
Alt 07-12-2011, 10:43   #6 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Object !== Array. Arrays sind indiziert, so lange man keine Hashes nutzt als Schlüssel. Daher sollte for each bei einem Array immer die "richtige" Reihenfolge (sortiert nach Index) ausgeben.
Omega Psi ist offline   Mit Zitat antworten
Alt 07-12-2011, 10:50   #7 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.041
Zitat:
Zitat von Omega Psi Beitrag anzeigen
Arrays sind indiziert, so lange man keine Hashes nutzt als Schlüssel. Daher sollte for each bei einem Array immer die "richtige" Reihenfolge (sortiert nach Index) ausgeben.
Und wo steht, das die for Schleife dieser Indizierung folgt?
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist offline   Mit Zitat antworten
Alt 07-12-2011, 11:10   #8 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Code:
package
{

  import flash.display.Sprite;
  import flash.text.TextField;

  public class ArrayTest extends Sprite
  {
    public function ArrayTest()
    {
      const array:Array = [];

      for (var i:int; i < 10; i++)
      {
        array[i] = i;
      }

      i = 0;

      for each(var n:int in array)
      {
        trace(n, array[i++] == n);
      }
    }
  }
}
Das scheint deterministisch zu sein.
Omega Psi ist offline   Mit Zitat antworten
Alt 07-12-2011, 11:52   #9 (permalink)
Neuer User
 
Registriert seit: Aug 2011
Beiträge: 16
Nein, leider ist es eben nicht so. Wie gesagt, ich hatte den Fall, dass weder nach der "Indizierungsreihenfolge" noch nach der "Hinzufügungsreihenfolge" iteriert wurde. Ich vermute zwar stark, dass das nur bei "kargen" Arrays auftritt, aber auf jeden Fall war's so.
ZerNot ist offline   Mit Zitat antworten
Alt 07-12-2011, 11:57   #10 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Kannst du mal den Code zeigen bitte?
Omega Psi ist offline   Mit Zitat antworten
Alt 07-12-2011, 12:15   #11 (permalink)
Neuer User
 
Registriert seit: Aug 2011
Beiträge: 16
Mittlerweile habe ich den Code schon umgebaut, um das Problem zu beheben. Außerdem ist die Array-Erstellung und die Iteration usw. auf verschiedene Klassen verteilt. Ich konstruiere aber mal ein Beispiel, bei dem das Problem auftritt - bitte aber nicht die Sinnhaftigkeit hinterfragen - im Originalcode sah das anders aus:

Code:
var a:Array = new Array();
			
for (var i:int; i < 100; i++)
	a[i * 3] = new MyClass(i * 3);
			
for each (var m:MyClass in a)
	trace(m.x);
Die Klasse MyClass ist definiert:

Code:
public class MyClass extends Object
{
	public function MyClass(x:int)
	{
		_x = x;
	}
		
	public function get x():int
	{
		return _x;
	}
	
	private var _x:int;
}
ZerNot ist offline   Mit Zitat antworten
Alt 07-12-2011, 12:20   #12 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Ja, die Lücken, die du erzeugst sorgen für die "Unregelmäßigkeit". Bei einem einfach push ist alles gerade.
Omega Psi ist offline   Mit Zitat antworten
Alt 07-12-2011, 15:47   #13 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.041
Zitat:
Zitat von Omega Psi Beitrag anzeigen
Das scheint deterministisch zu sein.
Der Schein kann trügen.
Ich hätte es gern irgendwo dokumentiert, denn wenn es nur in sehr seltenen Fällen anders ist, könnte die Fehlersuche schwierig werden.

Kann man irgendwo sehen, was da wirklich passiert?
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist offline   Mit Zitat antworten
Alt 07-12-2011, 15:54   #14 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Man kann versuchen Tamarin zu debuggen. Aber letzten Endes scheint es so zu sein, das die for each austeigt, wenn Indizes implzit erzeugt werden durch
Code:
[][1] = 2;
zum Beispiel oder eben wie im Beispiel oben gezeigt.
Omega Psi 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
type casting mit array elementen killkolor ActionScript 1 2 08-01-2005 15:52
Array mit Elementen des Types TextField Sandman_2k Flash MX 1 01-06-2004 22:40
gleichzeitiges auslesen von array elementen kissel ActionScript 1 2 14-01-2004 14:20
Array.push mit x Elementen??? mrfreeman12 ActionScript 1 3 06-08-2003 22:05
Zufällige Auswahl von Array-Elementen sschacht ActionScript 1 4 09-03-2003 14:27


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:36 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele