NESNEYE YÖNELİK PROGRAMLAMA Tuna GÖKSU Dizi Kavramı Bellekte ardı arda yer alan aynı türden nesneler kümesine dizi (array) denilir. Bir dizi içerisindeki bütün elemanlara aynı isimle ulaşılır.Yani dizideki bütün elemanların isimleri ortaktır. Elemanlar arasındaki ayırt edici özellik, bellekteki yeridir. Dizi Kavramı 5 elemanlı bir tamsayı dizisi bellekte aşağıdaki gibi yerleştirilir. Diziler C#’da diziler ayrı bir tür olarak tasarlanmıştır. Bütün diziler System.Array sınıfından türetilmiştir. Bir dizi tanımlandığında Array sınıfı türünden bir nesne tanımlanmış olur. Dizinin sınırlarını aşan bir indeks kullandığımızda derleme hatası oluşmaz, ancak çalışma zamanında hata oluşur. Diziler Dizi tanımlamak için kullanılacak syntax şöyledir: ◦ türBelirleyici[] diziAdı= new türBelirleyici[ElemanSayısı]; türBelirleyici kullanmak istediğiniz veri türüdür. Örnek: ◦ string [ ] names = new string [100]; ◦ int [ ] myData = new int [10]; int [] dizi; dizi = new int [19]; Diziler new anahtar sözcüğü ile, dizinin her elemanına temel veri türleri için varsayılan değer, ilk değer olarak verilmektedir. Bu ilk değer; referans türleri için null, nümerik türler için 0, bool türü için ise false’tur. Dizilere İlk Değer Verme days[0] = 31; // January days[1] = 28; // February days[2] = 31; // March Tanım esnasında değer atamak için: ◦ Örnek: int[] days = new int[12] {31,28,31,30,31,30,31,31,30,31,31}; string[ ] dizi1={“Bilgisayar”,“Mühendisliği”,“Bölümü”}; int [ ] dizi2={5,9,12,56,23}; float [ ] dizi3={8f,39f,324f,23f,2f}; Dizilere İlk Değer Verme Varyasyonları int [ ] days = new int [ ] {31,28,31,30,31,30,31,31,30,31,31}; ◦ veya int [ ] days = {31,28,31,30,31,30,31,31,30,31,31}; Derleyici, eleman sayısını hesaplayarak parantezler arasını otomatik dolduracaktır. Eleman sayısı belirlenen bir dizinin eleman sayısı daha sonra değiştirilemez. foreach anahtar sözcüğü foreach yalnızca dizilere uygulanabilen bir döngü yapısıdır. Kullanımı şu şekildedir: int[] dizi={3,2,6,7}; foreach(int eleman in dizi) Console.WriteLine(eleman); Burada dizi dizisinin bütün elemanları teker teker ekrana yazdırılıyor. Dizinin tüm elemanları ile aynı işlemler yapılacaksa kullanılmalıdır. Çok boyutlu diziler Çok boyutlu diziler kısaca her bir elemanı bir dizi şeklinde olan dizilerdir, matris dizileri (düzenli diziler) ve düzensiz diziler olmak üzere ikiye ayrılır. Matris Diziler Her bir dizi elemanının eşit sayıda dizi içerdiği dizilerdir İki boyutlu matris diziler 3X2 boyutunda iki boyutlu bir matris dizi aşağıdaki gibi tanımlanabilir: ◦ int[,] dizi=new int[3,2]; veya ◦ int[,] dizi={{1,2},{3,4},{5,6}}; Matris Diziler İkinci dizinin elemanları indekslerine göre aşağıdaki gibidir. dizi[0,0] dizi[0,1] dizi[1,0] dizi[1,1] dizi[2,0] dizi[2,1] → → → → → → 1 2 3 4 5 6 Matris Diziler Bu diziyi matris olarak aşağıdaki gibi gösterebiliriz: Çok Boyutlu Dizilere İlk Değer Verme int [,] myData = new int [ , ] { {1,2,3}, {4,5,6} }; int [,] myData = new int [ 2 ,3 ] { {1,2,3}, {4,5,6} }; int [ ] myData = new int [,] { {1,2,3}, {4,5,6} }; İkiden fazla boyutlu matris diziler Üç boyutlu bir dizi: int[,,] dizi=new int[3,2,2]; ◦ veya int[,,] dizi={{{1,2},{3,4}},{{5,6},{7,8}},{{9,10},{11,12}}}; Düzensiz Diziler Her bir dizi elemanının farklı sayıda eleman içerebileceği çok boyutlu dizilerdir. int[][] dizi=new int[3][]; dizi[0]=new int[3]; dizi[1]=new int[4]; dizi[2]=new int[2]; Düzensiz Diziler Birinci satırda 3 satırı olan ancak sütun sayısı belli olmayan iki boyutlu bir dizi tanımlanıyor. İkinci, üçüncü ve dördüncü satırda da bu iki boyutlu dizinin her bir satırının kaç sütun içerdiği ayrı ayrı belirtiliyor. Dizilerle Kullanılabilen Metotlar GetLength() ◦ Herhangi bir dizinin eleman sayısını int olarak tutar. CopyTo(Array array, int index) ◦ Çağrıldığı dizinin elemanlarını indexten itibaren array dizisine kopyalar void Array.Copy(Array source, Array destination, int index) ◦ Source dizisini, destination dizisine indexten itibaren kopyalar. void Array.Sort(Array array) ◦ Array dizisini sıralar int Array.BinarySearch(Array array, object value) ◦ Array dizisinde value değerini arar.