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 2
32
- 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
|
|
|