Dizinlenmiş diziler

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

Dizinlenmiş diziler, verilerin her birine işaretsiz bir tam sayı değeri ile erişilebilecek şekilde bir veya birden fazla değer dizisi saklar. İlk dizin her zaman 0 numaradır ve dizin, diziye eklenen her alt öğe için 1 artar. ActionScript 3.0'da iki sınıf dizinlenmiş dizi olarak kullanılır: Array sınıfı ve Vector sınıfı.

Dizinlenmiş diziler, dizin sayısı için işaretsiz bir 32-bit tam sayı kullanır. Dizinlenmiş bir dizinin maksimum boyutu 232 - 1 veya 4.294.967.295'tir. Maksimum boyuttan daha büyük bir dizi oluşturma girişimi sonunda çalışma zamanı hatası oluşur.

Dizinlenmiş dizinin tek bir öğesine erişmek için dizi erişimi ([]) operatörünü kullanarak, erişmek istediğiniz öğenin dizin konumunu belirtirsiniz. Örneğin, şu kod songTitles adındaki dizinlenmiş dizide bulunan ilk öğeyi (dizin 0'daki öğe) temsil eder:

songTitles[0]

Dizi değişkeni adı ile ardından gelen köşeli ayraç içindeki dizin birleşimi, tek bir tanımlayıcı olarak hareket eder. (Başka bir deyişle, bu bir değişken adı gibi kullanılabilir.) Atama deyiminin sol tarafındaki adı ve dizini kullanarak dizinlenmiş dizi öğesine bir değer atayabilirsiniz:

songTitles[1] = "Symphony No. 5 in D minor";

Aynı şekilde, atama deyiminin sağ tarafındaki adı ve dizini kullanarak dizinlenmiş dizi öğesinin değerini alabilirsiniz:

var nextSong:String = songTitles[2];

Ayrıca açıkça bir değer sağlamak yerine, köşeli ayraç içinde bir değişken de kullanabilirsiniz. (Değişken, uint, pozitif int veya pozitif tam sayı olan bir Number örneği gibi negatif olmayan bir tam sayı içermelidir.) Bu teknik genellikle dizinlenmiş dizideki öğeler üzerinde "döngü gerçekleştirmek" ve öğelerin bazılarında veya tümünde bir işlem gerçekleştirmek için yaygın olarak kullanılır. Aşağıdaki kod listesi bu tekniği göstermektedir. Bu kod, oddNumbers adındaki bir Array nesnesinde bulunan değerlerin her birine erişmek için bir döngü kullanır. Değerlerin her birini “oddNumber[index] = value” biçiminde yazdırmak için trace() deyimini kullanır:

var oddNumbers:Array = [1, 3, 5, 7, 9, 11]; 
var len:uint = oddNumbers.length; 
for (var i:uint = 0; i < len; i++) 
{ 
    trace("oddNumbers[" + i.toString() + "] = " + oddNumbers[i].toString()); 
}

Array sınıfı

Birinci dizinlenmiş dizi türü, Array sınıfıdır. Bir Array örneği herhangi bir veri türünün değerini bulundurabilir. Aynı Array nesnesi, farklı veri türlerindeki nesneleri bulundurabilir. Örneğin, tek bir Array örneği, dizin 0'da bir String değerine, dizin 1'de bir Number örneğine ve dizin 2'de bir XML nesnesine sahip olabilir.

Vector sınıfı

ActionScript 3.0'da kullanılabilir olan başka bir dizinlenmiş dizi türü de Vector sınıfıdır. Vector örneği türlenmiş dizidir, başka bir deyişle, Vector örneğindeki tüm öğeler her zaman aynı veri türüne sahiptir.

Not: Vector sınıfı, Flash Player 10 ve Adobe AIR 1.5'ten itibaren kullanılabilir.

Bir Vector değişkeni bildirdiğinizde veya bir Vector nesnesini başlattığınızda, Vector öğesinin içerebildiği nesnelerin veri türünü açıkça belirtirsiniz. Belirtilen veri türü, Vector öğesinin taban türü olarak bilinir. Çalışma zamanında ve derleme zamanında (katı modda), Vector öğesinin değerini ayarlayan veya Vector öğesinden bir değer alan herhangi bir kod kontrol edilir. Eklenen veya alınan nesnenin veri türü, Vector öğesinin taban türüyle eşleşmezse bir hata oluşur.

Veri türü kısıtlamasına ek olarak, Vector sınıfının Array sınıfından ayırt edilmesini sağlayan başka kısıtlamaları vardır:

  • Vector yoğun bir dizidir. Array nesnesi, 1-6 arasındaki konumlarda değer içermese de, 0 ve 7 dizinlerinde değerler içerebilir. Ancak bir Vector öğesinin her dizinde bir değer (veya null değeri) içermesi gerekir.

  • Vector isteğe bağlı olarak sabit uzunlukta olabilir. Başka bir deyişle, Vector öğesinin içerdiği öğelerin sayısı değişemez.

  • Vector öğelerine erişim sınırlarla denetlenir. Son öğeden büyük bir dizinden (length - 1) asla bir değer okuyamazsınız. Asla geçerli son dizinin ötesinde birden çok dizin içeren bir değer ayarlayamazsınız. (Başka bir deyişle, varolan bir dizinde veya [length] dizininde yalnızca bir değer ayarlayabilirsiniz.)

Vector öğesinin, sahip olduğu kısıtlamalar nedeniyle, tüm öğeleri tek bir sınıfın örnekleri olan Array örneğine kıyasla üç tane başlıca avantajı vardır:

  • Performans: Array örneği yerine Vector örneği kullanıldığında, dizi öğesinin erişimi ve yinelemesi daha hızlıdır.

  • Tür güvenliği: katı modda derleyici veri türü hatalarını tanımlayabilir. Bu tür hata örnekleri arasında, Vector öğesine yanlış veri türünde bir değer atanması veya Vector öğesinden değer okunurken yanlış veri türü beklenmesi yer alır. Çalışma zamanında, Vector nesnesine veri eklenirken veya Vector öğesinden veri okunurken de veri türleri kontrol edilir. Ancak bir Vector öğesine değer eklemek için push() yöntemini veya unshift() yöntemini kullandığınızda, argümanların veri türlerinin derleme zamanında kontrol edilmediğini unutmayın. Bu yöntemler kullanılırken, değerler çalışma zamanında kontrol edilir.

  • Güvenilirlik: çalışma zamanı aralık kontrolü (veya sabit uzunluk kontrolü) Dizilere kıyasla güvenilirliği önemli derecede artırır.

Ek kısıtlama ve avantajların yanı sıra, Vector sınıfı Array sınıfına çok benzer. Bir Vector nesnesinin özellikleri ve yöntemleri birçok durumda Array öğesinin özelliklerine ve yöntemlerine benzer. Tüm öğelerin aynı veri türüne sahip olduğu bir Dizi kullandığınız çoğu durumunda, Vector örneği tercih edilebilir.

Dizi oluşturma

Array örneği veya Vector örneği oluşturmak için birçok teknik kullanabilirsiniz. Ancak, her dizi oluşturma tekniği birbirinden farklılık gösterir.

Array örneği oluşturma

Array() yapıcısını çağırarak veya Array değişmez sözdizimini kullanarak bir Array nesnesi oluşturursunuz.

Array() yapıcısı işlevi üç farklı şekilde kullanılabilir. İlk olarak, yapıcıyı argüman olmadan çağırırsanız, boş bir dizi alırsınız. Dizide herhangi bir öğe olmadığını doğrulamak için Array sınıfının length özelliğini kullanabilirsiniz. Örneğin, şu kod Array() yapıcısını argüman olmadan çağırır:

var names:Array = new Array(); 
trace(names.length); // output: 0

İkinci olarak, Array() yapıcısına tek parametre olarak bir sayıyı kullanırsanız, o sayı değerinin belirttiği uzunlukta bir dizi oluşturulur ve öğelerin her birinin değeri undefined olarak ayarlanır. Argümanın, 0 ile 4.294.967.295 arasında işaretsiz bir tam sayı olması gerekir. Örneğin, şu kod Array() yapıcısını tek bir sayısal argüman ile çağırır:

var names:Array = new Array(3); 
trace(names.length); // output: 3 
trace(names[0]); // output: undefined 
trace(names[1]); // output: undefined 
trace(names[2]); // output: undefined

Üçüncü olarak, yapıcıyı çağırır ve parametre olarak bir öğe listesi iletirseniz, parametrelerin her birine karşılık gelen öğelerle bir dizi oluşturulur. Şu kod Array() yapıcısına üç argüman iletir:

var names:Array = new Array("John", "Jane", "David"); 
trace(names.length); // output: 3 
trace(names[0]); // output: John 
trace(names[1]); // output: Jane 
trace(names[2]); // output: David

Array değişmezleriyle de diziler oluşturabilirsiniz. Aşağıdaki örnekte gösterildiği gibi, bir Array değişmezi doğrudan bir dizi değişkenine atanabilir:

var names:Array = ["John", "Jane", "David"];

Vector örneği oluşturma

Vector.<T>() yapıcısını çağırarak bir Vector örneği oluşturduğunuzda ayrıca taban türünü de belirtirsiniz. Vector.<T>() global işlevini çağırarak da bir Vector oluşturabilirsiniz. Bu işlev, belirtilen bir nesneyi Vector örneğine dönüştürür. Flash Professional CS5 ve üzerinde, Flash Builder 4 ve üzerinde, Flex 4 ve üzerinde Vektör değişmez sözdizimi kullanarak vektör örneği oluşturabilirsiniz.

Her Vector değişkeni (veya aynı şekilde bir Vector yöntemi parametresi ya da yöntem döndürme türü) bildirdiğinizde, Vector değişkeninin taban türünü belirtirsiniz. Vector.<T>() yapıcısını çağırarak bir Vector örneği oluşturduğunuzda ayrıca taban türünü de belirtirsiniz. Başka bir deyişle, ActionScript'te Vector terimini her kullandığınızda, bir taban türü bu terime eşlik eder.

type parametresi sözdizimini kullanarak Vector öğesinin taban türünü belirtirsiniz. type parametresi, kodda Vector sözcüğünden hemen sonra gelir. Bu örnekte gösterildiği gibi, bir nokta (.) ve ardından açılı ayraç (<>) içine alınmış taban sınıfı adını içerir:

var v:Vector.<String>; 
v = new Vector.<String>();

Örneğin birinci satırında, v değişkeni Vector.<String> örneği olarak bildirilir. Başka bir deyişle, bu yalnızca String örneklerini barındırabilen bir dizinlenmiş diziyi temsil eder. İkinci satır, aynı Vector türünde bir örnek (başka bir deyişle, öğelerinin tümü String örneği olan bir Vector) oluşturmak için Vector() yapıcısını çağırır. Bu nesneyi v öğesine atar.

Vector.<T>() yapıcısını kullanma

Vector.<T>() yapıcısını argüman olmadan kullanırsanız, bu boş bir Vector örneği oluşturur. length özelliğini kontrol ederek bir Vector öğesinin boş olup olmadığını test edebilirsiniz. Örneğin, şu kod, Vector.<T>() yapıcısını argüman olmadan çağırır:

var names:Vector.<String> = new Vector.<String>(); 
trace(names.length); // output: 0

Vector öğesinin başlangıçta kaç tane öğeye ihtiyacı olduğunu önceden bilirseniz, Vector öğesinde öğe sayısını önceden tanımlayabilirsiniz. Belirli sayıda öğe içeren bir Vector öğesi oluşturmak için, öğe sayısını birinci parametre (length parametresi) olarak iletin. Vector öğeleri boş olamayacağından, öğeler taban türünde örneklerle doldurulur. Taban türü, null değerlerine izin veren bir başvuru türüyse, öğelerin tümü null değerini içerir. Aksi takdirde, öğelerin tümü sınıfın varsayılan değerini içerir. Örneğin, bir uint değişkeni null olamaz. Sonuç olarak, aşağıdaki kod listesinde, her biri 0 değerini içeren yedi öğeyle ages adındaki Vector öğesi oluşturulur:

var ages:Vector.<uint> = new Vector.<uint>(7); 
trace(ages); // output: 0,0,0,0,0,0,0 

Son olarak, Vector.<T>() yapıcısını kullanarak, ikinci parametre (fixed parametresi) için true değerini iletip sabit uzunlukta bir Vector öğesi de oluşturabilirsiniz. Bu durumda, belirtilen öğe sayısına sahip bir Vector öğesi oluşturulur ve öğelerin sayısı değiştirilemez. Ancak, yine de sabit uzunluktaki Vector öğelerinin değerlerini değiştirebildiğinizi unutmayın.

Vektör değişmez sözdizimi oluşturucu

Flash Professional CS5 ve üzerinde, Flash Builder 4 ve üzerinde, Flex 4 ve üzerinde Vector<T>() yapıcısına Vector öğesinin ilk değerlerini belirtmek için değerler listesi iletebilirsiniz:

// var v:Vector.<T> = new <T>[E0, ..., En-1 ,]; 
// For example: 
var v:Vector.<int> = new <int>[0,1,2,];

Aşağıdaki bilgiler bu sözdizimi için geçerlidir:

  • Son virgül isteğe bağlıdır.

  • Dizideki boş öğeler desteklenmez; var v:Vector.<int> = new <int>[0,,2,] gibi bir ifade bir derleyici hatası atar.

  • Vector örneği için varsayılan bir uzunluk belirtemezsiniz. Uzunluk, başlatma listesindeki öğe sayısı kadardır.

  • Vector örneğinin sabit bir uzunluğa sahip olup olmadığını belirtemezsiniz. Onun yerine, fixed özelliğini kullanın.

  • Değerler olarak iletilen öğeler belirtilen türle eşleşmezse veri kaybı veya hatalar oluşabilir. Örneğin:
    var v:Vector.<int> = new <int>[4.2]; // compiler error when running in strict mode 
    trace(v[0]); //returns 4 when not running in strict mode

Vector.<T>() global işlevini kullanma

Vector nesnesi oluşturmak için Vector.<T>( ve Vector değişmez sözdizim yapıcılarının yanı sıra Vector.<T>() global işlevini de kullanabilirsiniz. Vector.<T>() global işlevi bir dönüştürme işlevidir. Vector.<T>() global işlevini çağırdığınızda, yöntemin döndürdüğü Vector öğesinin taban türünü belirtirsiniz. Argüman olarak tek bir dizinlenmiş dizi (Array veya Vector örneği) iletirsiniz. Bu yöntem daha sonra belirtilen taban türüne sahip, kaynak dizi argümanındaki değerleri içeren bir Vector öğesi döndürür. Aşağıdaki kod listesi, Vector.<T>() global işlevini çağırmak için sözdizimini gösterir:

var friends:Vector.<String> = Vector.<String>(["Bob", "Larry", "Sarah"]);

Vector.<T>() global işlevi, iki düzeyde veri türü dönüştürmesi gerçekleştirir. İlk olarak, bir Array örneği işleve iletildiğinde, Vector örneği döndürülür. İkinci olarak, kaynak dizi bir Array veya Vector örneği de olsa, işlev kaynak dizinin öğelerini taban türünün değerlerine dönüştürmeye çalışır. Dönüştürme, standart ActionScript veri türü dönüştürme kurallarını kullanır. Örneğin, aşağıdaki kod listesi, kaynak Array öğesindeki String değerlerini sonuç Vector öğesindeki tam sayılara dönüştürür. Birinci değerin ondalık kısmı ("1.5") kırpılır ve sayısal olmayan üçüncü değer ("Waffles") sonuçta 0'a dönüştürülür:

var numbers:Vector.<int> = Vector.<int>(["1.5", "17", "Waffles"]); 
trace(numbers); // output: 1,17,0

Kaynak öğelerden herhangi biri dönüştürülemezse, bir hata oluşur.

Kod, Vector.<T>() global işlevini çağırdığında, kaynak dizideki bir öğe belirtilen taban türünün alt sınıfının bir örneğiyse, öğe sonuçta elde edilen Vector öğesine eklenir (herhangi bir hata oluşmaz). Vector.<T>() global işlevinin çağrılması, T taban türüne sahip bir Vector öğesinin, T öğesinin üst sınıfı olan bir taban türüne sahip Vector öğesine dönüştürülmesinin tek yoludur.

Dizi öğeleri ekleme

Dizinlenmiş diziye bir öğe eklemenin en temel yolu, dizi erişimi ([]) operatörünün kullanılmasıdır. Dizinlenmiş dizi öğesinin değerini ayarlamak için, Array veya Vector nesne adını ve atama deyiminin sol tarafındaki dizin sayısını kullanın:

songTitles[5] = "Happy Birthday";

Array veya Vector öğesi, o dizinde bir öğe içermiyorsa, dizin oluşturulur ve değer orada saklanır. O dizinde değer varsa, yeni değer varolan değerin yerini alır.

Array nesnesi, herhangi bir dizinde öğe oluşturmanıza olanak sağlar. Ancak bir Vector nesnesiyle yalnızca varolan bir dizine veya sonraki mevcut dizine değer atayabilirsiniz. Sonraki mevcut dizin, Vector nesnesinin length özelliğine karşılık gelir. Vector nesnesine yeni bir öğe eklemenin en güvenli yolu, bu listeye benzer bir kod kullanılmasıdır:

myVector[myVector.length] = valueToAdd;

Array ve Vector sınıfı yöntemlerinin üçü (push(), unshift() ve splice()) bir dizinlenmiş diziye öğeler eklemenize olanak sağlar. push() yöntemi bir dizinin sonuna bir veya daha fazla öğe ekler. Başka bir deyişle, push() yöntemi kullanılarak bir diziye eklenen son öğe, en yüksek dizin numarasına sahip olacaktır. unshift() yöntemi bir dizinin başına, her zaman 0 dizin numaralı olan bir veya birden fazla öğe ekler. splice() yöntemi dizideki belirli bir dizine istenen sayıda öğe ekler.

Aşağıdaki örnek, bu yöntemlerin üçünü de göstermektedir. Gezegenlerin güneşe yakınlık sıralarına göre gezegenlerin adlarını saklamak için planets adlı bir dizi oluşturulur. Önce, ilk öğe olan Mars öğesini eklemek için push() yöntemi çağrılır. Ardından dizinin önüne ait olan Mercury öğesini eklemek için unshift() yöntemi çağrılır. Son olarak Venus ve Earth öğelerini, Mercury öğesinin arkasına Mars öğesinin önüne eklemek için splice() yöntemi çağrılır. splice() öğesine gönderilen ilk argüman olan 1 tam sayısı, eklemenin dizin 1'den başlaması komutunu verir. splice() öğesine gönderilen ikinci argüman olan 0 tam sayısı, herhangi bir öğenin silinmeyeceğini belirtir. Son olarak, splice() öğesine gönderilen üçüncü ve dördüncü argümanlar olan Venus ve Earth eklenir.

var planets:Array = new Array(); 
planets.push("Mars"); // array contents: Mars 
planets.unshift("Mercury"); // array contents: Mercury,Mars 
planets.splice(1, 0, "Venus", "Earth"); 
trace(planets); // array contents: Mercury,Venus,Earth,Mars

push() ve unshift() yöntemleri, değiştirilen dizinin uzunluğunu temsil eden işaretsiz bir tam sayı döndürür. splice() yöntemi öğe eklemek için kullanıldığında boş bir dizi döndürür; bu her ne kadar garip gelse de splice() yönteminin çok yönlülüğü göz önüne alındığında daha kolay anlaşılabilir. splice() yöntemini yalnızca bir diziye öğe eklemek için değil ayrıca bir diziden öğe kaldırmak için de kullanabilirsiniz. splice() yöntemi öğeleri kaldırmak için kullanıldığında, kaldırılan öğeleri içeren bir dizi döndürür.

Not: Vector nesnesinin fixed özelliği true olursa, Vector öğesindeki toplam öğe sayısı değiştirilemez. Burada açıklanan teknikleri kullanarak sabit uzunluktaki Vector öğesine yeni bir öğe eklemeyi denerseniz, bir hata oluşur.

Değerleri alma ve dizi öğelerini kaldırma

Dizinlenmiş diziden bir öğenin değerini almanın en basit yolu, dizi erişimi ([]) operatörünün kullanılmasıdır. Dizinlenmiş dizi öğesinin değerini almak için, Array veya Vector nesne adını ve atama deyiminin sağ tarafındaki dizin sayısını kullanın:

var myFavoriteSong:String = songTitles[3];

Herhangi bir öğenin bulunmadığı bir dizin kullanılarak Array veya Vector öğesinden değer almaya çalışılması mümkündür. Bu durumda, Array nesnesi undefined değerini döndürür ve Vector öğesi bir RangeError istisnası atar.

Array ve Vector sınıfının üç yöntemi (pop(), shift() ve splice()) öğeleri kaldırmanıza olanak sağlar. pop() yöntemi, dizinin sonundaki öğeyi kaldırır. Başka bir deyişle, en yüksek dizin numarasına sahip öğeyi kaldırır. shift() yöntemi, dizinin başındaki öğeyi, başka bir deyişle, her zaman 0 dizin numarasına sahip olan öğeyi kaldırır. Öğe eklemek için de kullanılabilen splice() yöntemi, yönteme gönderilen ilk argüman tarafından belirtilen dizin numarasından başlayarak rastgele sayıda öğeyi kaldırır.

Aşağıdaki örnek, bir Array örneğinden öğe kaldırmaya yönelik üç yöntemi de kullanır. Geniş su kütlelerinin adlarını saklamak için oceans adında bir Array öğesi oluşturulur. Array öğesindeki adların bazıları okyanus olmayıp göl olduğundan, bu adların kaldırılması gerekir.

İlk olarak Aral ve Superior öğelerini kaldırmak ve Atlantic ve Indian öğelerini eklemek için splice() yöntemi kullanılır. splice() öğesine gönderilen ilk argüman olan 2 tam sayısı, işlemin dizin 2'deki listede bulunan üçüncü öğeden başlaması gerektiğini belirtir. İkinci argüman olan 2, iki öğenin kaldırılması gerektiğini belirtir. Kalan argümanlar olan Atlantic ve Indian, dizin 2 konumuna eklenecek değerlerdir.

İkinci olarak, dizideki son öğe olan Huron öğesini kaldırmak için pop() yöntemi kullanılır. Üçüncü olarak da, dizideki ilk öğe olan Victoria öğesini kaldırmak için shift() yöntemi kullanılır.

var oceans:Array = ["Victoria", "Pacific", "Aral", "Superior", "Indian", "Huron"]; 
oceans.splice(2, 2, "Arctic", "Atlantic"); // replaces Aral and Superior 
oceans.pop(); // removes Huron 
oceans.shift(); // removes Victoria 
trace(oceans);// output: Pacific,Arctic,Atlantic,Indian

pop() ve shift() yöntemleri, kaldırılan öğeyi döndürür. Bir Array örneği için, diziler herhangi bir veri türünün değerlerini bulundurabildiğinden, döndürülen değerin veri türü Object olur. Vector örneği için, döndürülen değerin veri türü, Vector öğesinin taban türüdür. splice() yöntemi, kaldırılan değerleri içeren bir Array veya Vector öğesini döndürür. Aşağıdaki örnekte gösterildiği gibi, splice() öğesine yapılan bir çağrı, döndürülen Array öğesini yeni bir Array değişkenine atayacak şekilde oceans Array örneğini değiştirebilirsiniz:

var lakes:Array = oceans.splice(2, 2, "Arctic", "Atlantic"); 
trace(lakes); // output: Aral,Superior

Bir Array nesnesi öğesinde delete operatörünü kullanan bir kodla karşılaşabilirsiniz. delete operatörü, bir Array öğesinin değerini undefined olarak ayarlar ancak öğeyi Array öğesinden kaldırmaz. Örneğin, şu kod oceans Array içindeki üçüncü öğede delete operatörünü kullanır, ancak Array öğesinin uzunluğu 5 olarak kalır:

var oceans:Array = ["Arctic", "Pacific", "Victoria", "Indian", "Atlantic"]; 
delete oceans[2]; 
trace(oceans);// output: Arctic,Pacific,,Indian,Atlantic 
trace(oceans[2]); // output: undefined 
trace(oceans.length); // output: 5

Bir dizinin length özelliğini kullanarak Array veya Vector öğesini kırpabilirsiniz. Dizinlenmiş dizinin length özelliğini geçerli dizi uzunluğundan düşük bir uzunluğa ayarlarsanız, yeni length eksi 1 değerinden yüksek dizin sayılarında saklanan öğeler kaldırılarak dizi kırpılır. Örneğin, oceans dizisi, tüm geçerli girişler dizinin başında olacak şekilde sıralansaydı, şu kodda gösterildiği gibi, dizinin sonundaki girişleri kaldırmak için length özelliğini kullanabilirdiniz:

var oceans:Array = ["Arctic", "Pacific", "Victoria", "Aral", "Superior"]; 
oceans.length = 2; 
trace(oceans); // output: Arctic,Pacific
Not: Vector nesnesinin fixed özelliği true olursa, Vector öğesindeki toplam öğe sayısı değiştirilemez. Burada açıklanan teknikleri kullanarak sabit uzunluktaki Vector öğesinden bir öğeyi kaldırmayı veya söz konusu Vector öğesini kırpmayı denerseniz, bir hata oluşur.

Diziyi sıralama

Sıralamayı düzenleyerek veya ters çevirerek dizinlenmiş dizinin sıralamasını değiştirmenize olanak sağlayan üç yöntem vardır: reverse(), sort() ve sortOn() Bu yöntemlerin tümü, varolan diziyi değiştirir. Aşağıdaki tabloda, bu yöntemler ve bu yöntemlerin Array ve Vector nesnelerine yönelik davranışı özetlenmektedir:

Yöntem

Array davranışı

Vector davranışı

reverse()

Son öğe ilk öğe olacak ve sondan bir önceki öğe ikinci öğe olacak, vb. şekilde dizinin sırasını değiştirir

Array davranışıyla aynıdır

sort()

Array içindeki öğeleri, alfabetik veya sayısal sıralama gibi önceden tanımlı çeşitli şekillerde sıralamanıza olanak sağlar. Özel bir sıralama algoritması da belirtebilirsiniz.

Öğeleri, belirttiğiniz özel sıralama algoritmasına göre sıralar

sortOn()

Sıralama anahtarı olarak kullanmak üzere özellik veya özellikleri belirterek bir veya birkaç ortak özelliğe sahip nesneleri sıralamanıza olanak sağlar

Vector sınıfında kullanılamaz

reverse() yöntemi

reverse() yöntemi herhangi bir parametre almaz ve bir değer döndürmez, ancak dizinizin sırasını geçerli durumundan tersi sıralamaya geçirmenizi sağlar. Şu örnek, oceans dizisinde listelenen okyanusların sırasını tersine çevirir:

var oceans:Array = ["Arctic", "Atlantic", "Indian", "Pacific"]; 
oceans.reverse(); 
trace(oceans); // output: Pacific,Indian,Atlantic,Arctic

sort() yöntemi ile temel sıralama (yalnızca Array sınıfı)

Array örneği için, sort() yöntemi varsayılan sıralama düzenini kullanarak dizideki öğeleri yeniden düzenler. Varsayılan sıralama düzeni şu özelliklere sahiptir:

  • Sıralama büyük/küçük harf duyarlıdır, başka bir deyişle, büyük harfli karakterler küçük harfli karakterlerden önce gelir. Örneğin, D harfi b harfinden önce gelir.

  • Sıralama artan sıradadır, başka bir deyişle, düşük karakter kodları (örn. A), daha yüksek karakter kodlarından (örn. B) önce gelir.

  • Sıralama, aynı değerleri belirli bir sıralama olmaksızın birbiriyle bitiştirir.

  • Sıralama dize tabanlıdır, başka bir deyişle, öğeler karşılaştırılmadan önce dizelere dönüştürülür. (Örneğin, "1" dizesi, "3" dizesinden daha düşük karakter koduna sahip olduğundan 10, 3'ten önce gelir.)

Büyük/küçük harf duyarlılığı olmadan veya azalan sırada dizinizi sıralamanız gerekebilir ya da dizinizde alfabetik değil de sayısal olarak sıralamak istediğiniz sayılar bulunabilir. Array sınıfının sort() yöntemi, varsayılan sıralama düzeninin her bir özelliğini değiştirmenize olanak sağlayan bir options parametresine sahiptir. Bu seçenekler, aşağıdaki listede gösterildiği gibi, Array sınıfındaki statik sabitler kümesiyle tanımlanır:

  • Array.CASEINSENSITIVE: Bu seçenek, sıralamanın büyük/küçük harf duyarlı olmasını önler. Örneğin, küçük b harfi, büyük D harfinden önce gelir.

  • Array.DESCENDING: Bu seçenek varsayılan artan sıralamayı ters çevirir. Örneğin, B harfi A harfinden önce gelir.

  • Array.UNIQUESORT: Bu seçenek iki aynı değer bulunduğunda sıralamanın durdurulmasına neden olur.

  • Array.NUMERIC: Bu seçenek sayısal sıralama sağlar, böylece 3, 10 sayısından önce gelir.

Aşağıdaki örnek, bu seçeneklerden bazılarını vurgular. Birçok farklı seçenek kullanılarak sıralanan poets adında bir Array öğesi oluşturulur.

var poets:Array = ["Blake", "cummings", "Angelou", "Dante"]; 
poets.sort(); // default sort 
trace(poets); // output: Angelou,Blake,Dante,cummings 
 
poets.sort(Array.CASEINSENSITIVE); 
trace(poets); // output: Angelou,Blake,cummings,Dante 
 
poets.sort(Array.DESCENDING); 
trace(poets); // output: cummings,Dante,Blake,Angelou 
 
poets.sort(Array.DESCENDING | Array.CASEINSENSITIVE); // use two options 
trace(poets); // output: Dante,cummings,Blake,Angelou

sort() yöntemiyle özel sıralama (Array ve Vector sınıfları)

Array nesnesi için kullanılabilir olan temel sıralamaya ek olarak, özel bir sıralama kuralı da tanımlayabilirsiniz. Bu teknik, Vector sınıfı için kullanılabilir olan tek sort() yöntemi biçimidir. Özel bir sıralama tanımlamak için, özel bir sıralama işlevi yazıp bunu argüman olarak sort() yöntemine iletirsiniz.

Örneğin, her liste öğesinde kişinin tam adının bulunduğu bir ad listeniz varsa ve listeyi soyadına göre sıralamak istiyorsanız, her bir öğeyi ayrıştırmak için özel bir sıralama işlevi kullanmanız ve sıralama işlevinde soyadını kullanmanız gerekir. Aşağıdaki kod Array.sort() yöntemine yönelik bir parametre olarak kullanılan özel bir işlevle bunun nasıl yapılabileceğini gösterir:

var names:Array = new Array("John Q. Smith", "Jane Doe", "Mike Jones"); 
function orderLastName(a, b):int 
{ 
    var lastName:RegExp = /\b\S+$/; 
    var name1 = a.match(lastName); 
    var name2 = b.match(lastName); 
    if (name1 < name2) 
    { 
        return -1; 
    } 
    else if (name1 > name2) 
    { 
        return 1; 
    } 
    else 
    { 
        return 0; 
    } 
} 
trace(names); // output: John Q. Smith,Jane Doe,Mike Jones 
names.sort(orderLastName); 
trace(names); // output: Jane Doe,Mike Jones,John Q. Smith

orderLastName() özel sıralama işlevi, karşılaştırma işlemi için kullanılmak üzere her bir öğeden soyadını ayıklamak için normal bir ifade kullanır. orderLastName işlev tanımlayıcısı, names dizisinde sort() yöntemi çağrılırken tek parametre olarak kullanılır. Sıralama işlevi aynı ada iki dizi öğesinde çalıştığından, a ve b olmak üzere iki parametreyi kabul eder. Sıralama işlevinin döndürme değeri, öğelerin nasıl sıralanması gerektiğini belirtir:

  • -1 döndürme değeri, birinci parametrenin (a) ikinci parametreden (b) önce geldiğini belirtir.

  • 1 döndürme değeri, ikinci parametrenin (b) birinci parametreden (a) önce geldiğini belirtir.

  • 0 döndürme değeri, öğelerin eşit sıralama önceliğine sahip olduğunu belirtir.

sortOn() yöntemi (yalnızca Array sınıfı)

sortOn() yöntemi, nesneleri içeren öğelerin bulunduğu Array nesneleri için tasarlanmıştır. Bu nesnelerde, sıralama anahtarı olarak kullanılabilecek en az bir ortak özelliğin bulunması beklenir. Başka herhangi bir türdeki dizi için sortOn() yönteminin kullanılması beklenmeyen sonuçlara yol açar.

Not: Vector sınıfı sortOn() yöntemini içermez. Bu yöntem yalnızca Array nesneleri için kullanılabilir.

Aşağıdaki örnek, her bir öğe dize değil de nesne olacak şekilde poets Array öğesini değiştirir. Her nesne, şairin soyadını ve doğum yılını içerir.

var poets:Array = new Array(); 
poets.push({name:"Angelou", born:"1928"}); 
poets.push({name:"Blake", born:"1757"}); 
poets.push({name:"cummings", born:"1894"}); 
poets.push({name:"Dante", born:"1265"}); 
poets.push({name:"Wang", born:"701"});

Array öğesini born özelliğine göre sıralamak için sortOn() yöntemini kullanabilirsiniz. sortOn() yöntemi şu iki parametreyi tanımlar: fieldName ve options. fieldName argümanının dize olarak belirtilmesi gerekir. Aşağıdaki örnekte, sortOn() öğesi "born" ve Array.NUMERIC olmak üzere iki argümanla çağrılır. Sıralamanın alfabetik değil sayısal olarak yapılmasını sağlamak için Array.NUMERIC argümanı kullanılır. Diziye daha az veya daha çok basamaklı bir sayı da eklense sıralamanın beklendiği gibi davranacağı kesin olduğundan, tüm sayılar aynı sayıda basamak içerse de bu iyi bir uygulamadır.

poets.sortOn("born", Array.NUMERIC); 
for (var i:int = 0; i < poets.length; ++i) 
{ 
    trace(poets[i].name, poets[i].born); 
} 
/* output: 
Wang 701 
Dante 1265 
Blake 1757 
cummings 1894 
Angelou 1928 
*/

Orijinal diziyi değiştirmeden sıralama (yalnızca Array sınıfı)

Genellikle, sort() ve sortOn() yöntemleri bir Array öğesini değiştirir. Varolan diziyi değiştirmeden Array öğesini sıralamak isterseniz, options parametresinin parçası olarak Array.RETURNINDEXEDARRAY sabitini iletin. Bu seçenek, sıralamayı yansıtan yeni bir Array öğesi döndürmesini ve orijinal Array öğesini olduğu gibi bırakmasını yöntemlere bildirir. Yöntemler tarafından döndürülen Array öğesi, yeni sıralama düzenini yansıtan basit bir dizin sayıları Array öğesi olup orijinal Array içindeki öğeleri içermez. Örneğin, Array öğesini değiştirmeden poets Array öğesini doğum yılına göre sıralamak için options parametresi için iletilen argümanın parçası olarak Array.RETURNINDEXEDARRAY sabitini dahil edin.

Aşağıdaki örnek, döndürülen dizin bilgilerini indices adında bir Array öğesinde saklar ve şairleri doğum yılına göre sıralanmış şekilde vermek için indices dizisini değiştirilmemiş poets dizisiyle birlikte kullanır:

var indices:Array; 
indices = poets.sortOn("born", Array.NUMERIC | Array.RETURNINDEXEDARRAY); 
for (var i:int = 0; i < indices.length; ++i) 
{ 
    var index:int = indices[i]; 
    trace(poets[index].name, poets[index].born); 
} 
/* output: 
Wang 701 
Dante 1265 
Blake 1757 
cummings 1894 
Angelou 1928 
*/

Diziyi sorgulama

Array ve Vector sınıfının dört yönteminin tümü (concat(), join(), slice() ve toString()) bilgi için diziyi sorgular ancak diziyi değiştirmez. concat() ve slice() yöntemleri yeni diziler döndürürken, join() ve toString() yöntemleri de dize döndürür. concat() yöntemi, argüman olarak yeni bir diziyi veya öğeler listesini alır ve yeni bir dizi oluşturmak için bunları varolan diziyle birleştirir. slice() yöntemi, startIndex ve endIndex adında iki parametre içerir ve varolan diziden "dilimli" öğelerin bir kopyasını içeren yeni bir dizi döndürür. Dilim, startIndex parametresindeki öğeyle başlar ve endIndex parametresinden hemen önceki öğeyle sona erer. Şunu yinelemekte fayda var: endIndex parametresindeki öğe döndürme değerine dahil edilmez.

Aşağıdaki örnek, diğer dizilerin öğelerini kullanarak yeni diziler oluşturmak için concat() ve slice() öğelerini kullanır:

var array1:Array = ["alpha", "beta"]; 
var array2:Array = array1.concat("gamma", "delta"); 
trace(array2); // output: alpha,beta,gamma,delta 
 
var array3:Array = array1.concat(array2); 
trace(array3); // output: alpha,beta,alpha,beta,gamma,delta 
 
var array4:Array = array3.slice(2,5); 
trace(array4); // output: alpha,beta,gamma

Diziyi sorgulayıp dizinin içeriklerini dize olarak döndürmek için join() ve toString() yöntemlerini kullanabilirsiniz. join() yöntemi için herhangi bir parametre kullanılmıyorsa, iki yöntem de aynı şekilde hareket ederek dizideki tüm öğelerin virgül sınırlı listesini içeren bir dize döndürür. join() yöntemi, toString() yönteminden farklı olarak, döndürülen dizedeki her öğe arasında ayırıcı olarak kullanılacak sembolü seçmenizi sağlayan delimiter adında bir parametreyi kabul eder.

Aşağıdaki örnek, rivers adında bir Array öğesi oluşturur ve Array öğesindeki değerleri dize olarak döndürmek için hem join() hem de toString() öğelerini çağırır. toString() yöntemi virgül sınırlı değerler (riverCSV) döndürmek için kullanılırken, join() yöntemi + karakteriyle ayrılmış değerler döndürmek için kullanılır.

var rivers:Array = ["Nile", "Amazon", "Yangtze", "Mississippi"]; 
var riverCSV:String = rivers.toString(); 
trace(riverCSV); // output: Nile,Amazon,Yangtze,Mississippi 
var riverPSV:String = rivers.join("+"); 
trace(riverPSV); // output: Nile+Amazon+Yangtze+Mississippi

join() yöntemiyle ilgili bilinmesi gereken bir nokta, aşağıdaki örnekte gösterildiği gibi, ana dizi öğeleri için hangi ayırıcıyı belirttiğinize bakılmaksızın, yuvalanmış Array veya Vector örneklerinin her zaman virgülle ayrılmış değerlerle döndürülmesidir:

var nested:Array = ["b","c","d"]; 
var letters:Array = ["a",nested,"e"];  
var joined:String = letters.join("+"); 
trace(joined); // output: a+b,c,d+e