2009-03-06 19 views
13

AS3'teki Array, Dictionary ve Object türlerinin yineleme sırasını, her biri için ve for-in döngüleri için bilmek isterim. Ayrıca bu döngü tipi kombinasyonların yineleme sırasını hangi faktörler değiştirebilir? Örneğin, bir Array türünde her biri için bir öğenin her zaman ilk öğeden sonuncuya geçtiğini varsayalım. Her biri bir Sözlük'te kullanılamaz, bu nedenle sipariş, bir içeri-içi döngü kullanılarak nasıl belirlenir?For-Her Döngü AS3: Yön garantili mi?

+0

+1. Çok güzel bir soru, gözlemleriniz neler? Merak ediyorum! – dirkgently

+1

Bu iyi bir temel eh :) Bir projemde bir hata vardı, bir geri dönüşü olan bir dizi izledim ya da her biri için önünden geçiyordu. Her for-index ++ lopp ile değiştirdim ve hata ortadan kayboldu. Asla neden% 100 emin olmadım. –

cevap

5

Her döngü için for (x in y) türünü mi kastediyorsunuz? AS3 belirtimi, döngülerin "ECMA-262 sürüm 3 ve E4X'te tanımlandığı gibi aynı sözdizimine ve anlamlara sahip olduğunu" söyler.

ECMA-262, bölüm 12.6.4, "numaralandırma sırasının nesne tarafından tanımlandığını" belirtir - başka bir deyişle, bir liste, bir sözlük, bir dizi vb.

isterim umut açıkça numaralandırma düzeni belirtecektir (veya sipariş tanımlı olmadığından) ama kontrol etmedim çoğu koleksiyonları için dokümantasyon ...

DÜZENLEME: Maalesef gözlük devlet "özellikleri sıralamanın mekaniği [...] uygulamaya bağlıdır." Sıralama belirtmek için Dizi belgelerinde hiçbir şey göremiyorum. Dürüst olmak gerekirse biraz tatmin edici değil :(

+0

Teşekkürler Jon, sadece cevabınıza göre daha spesifik bir soruya cevap verdim –

+1

Soruları tamamen hatırladım, sanırım şu an oldukça açık :) –

+1

Düzenleme Jon için teşekkürler, Kesinlikle belgelerinizde belirtilmediği için tatmin edici değil. Bu –

2

AS3.0'da değerlendirme sırası değişti. Önceden, AS 1.0 ve 2.0'da, değerlendirme sırası, nesnelerin eklendiği sıraya dayanıyordu. 3.0, her döngü dizi düzeni sağlar pasajı deneyin. AS3.0 ve AS1.0 yukarıda deneyin

var a:Array = new Array(); 
a[ 1 ] = 'first'; 
a[ 0 ] = 'second'; 

for (var key:String in a) 
    trace(key + ': ' + a[ key ]); 

/Colin Moock bir sırasına göre temel 3.0 'de belirtildiği gibi 2,0

+0

üzerinde AS3 özel belgelerine bir göz atacağım Soru, bu kodun farklı Flash çalışma zamanları için aynı çıktıyı üretip üretmediğidir. – Pup

8

Bir XML veya XMLList nesnesini numaralandırılmadıkça, döngüde her biri için garanti edilmez;

Click here for Colin Moock's words from his book.

Orada tartışılan here olarak geçici çözümler vardır, ama dürüstçe sonra siparişi garanti etmek gerekirse sadece döngü için düzenli eski kullanabilir ve (uzunluk, numChildren, vs.) kaç kez yinelemek zorunda.

+0

, siparişin garanti edilmemesi için bildiğiniz özel bir neden var mı? Anlayabiliyorum, bir dizi sayısal olmayan indeksleme olabilir. Bu da beni merak etmeme yol açıyor. Kesinlikle bir Vector. <> Hafızada sıralı olarak depolandığından emin bir emir var mı? –

+0

Yukarıda belirttiğim gibi, Colin Moock bunu ayrıntılı bir şekilde ele aldı, yukarıdaki bağlantıyı doğrudan kitabından aldığımızdan çekinmeyin. -Cheers –

+2

Dürüst olmak gerekirse, hiçbir sebep belirtilmemişse bu ifadeden oldukça rahatsızım. Yanlış olduğuna inanıyorum, ama arkasında bir mantık ya da muhakeme yoktur (büyük ihtimalle düzenleme nedeniyle).Her döngü için bir Array –