DİZİLER (Arrays) Yrd.Doç.dr. Cİhad demİrlİ Kaynaklar: Algan, S. (2010). Her Yönüyle C# 4.0, Pusula Yay.,İstanbul Yanık, M. (2009) . Visual C# 3.0 for .Net Framework 3.5, Seçkin Yay., Ankara Aktaş, V. (2010). Her yönüyle C# 4.0, Kodlab Yay., İstanbul
Dizi Bellekte art arda yer alan aynı türden nesneler kümesine dizi (array) denilmektedir. Bir dizi, elemanlarına aynı isimle ulaşır. Elemanlara arasındaki ayırt edici özellik bellekteki yerleridir.
Dizi Dizi [0] Dizi elemanı Dizi indeksi 15 Dizi[0] 365 Dizi[1] -12 Dizi adı İndeks operatörü İndis (indeks) Dizi elemanı Dizi indeksi 15 Dizi[0] 365 Dizi[1] -12 Dizi[2] 5 Dizi[3] 78 Dizi[4] 1 Dizi[5]
Dizi tanımlama (tek boyutlu) Diziler System.Array sınıfından türetilirler. Array sınıfındaki tüm metotlar kullanılabilir. int[] Dizi = new int[25]; ya da int[] Dizi; Dizi= new int[25]; Bildirim ve tanımlama Dizi[0] Dizi[1] Dizi[2] … Dizi[n] Bildirim Tanımlama
Dizi tanımlama (tek boyutlu) int[] dizi = new int[25]; Dizinin eleman sayısı Dizi elemanları tipi Dizi türü new (operatör veya anahtar sözcük) Burada operatör olarak yeni nesne oluşturmak için kullanılmıştır. Dizi bildirim operatörü Dizi adı
Hatırlatma ! New anahtar sözcüğü ile tanımlanan değişkenlere varsayılan bir değer atanmaktadır. Referans türleri için ‘null’ Nümerik türler için ‘0’ Bool türü için ‘false’
Dizi tanımlama Birden fazla dizi bildirimi; int[] dizi1, dizi2; Birden fazla dizi tanımlaması; int[] dizi1=new int [10], dizi2=new int[10]; Her iki dizi için bellekte ayrı ayrı alan tahsisi yapılır (allocation)
Çok Boyutlu Diziler Matris diziler Düzensiz (jagged) diziler Her bir dizi elemanı eşit sayıda eleman içerir Düzensiz (jagged) diziler Her bir dizi elemanı farklı sayıda dizi elemanı içerir
Matris diziler Matris yapısındadırlar. int [,] Dizi = new int[3,4] indis 1 2 3
Matris diziler Boyutlar aynı olmak durumunda değildir. int [,] Dizi = {{1,2},{3,4},{5,6}}; Dizi [0,0] 1 Dizi [0,1] 2 Dizi [1,0] 3 Dizi [1,1] 4 Dizi [2,0] 5 Dizi [2,1] 6 indis 1 2 3 4 5 6
Matris diziler 2 veya daha fazla boyutlu olabilir (örn. 3 boyutlu). int [,,] Dizi = {{{1,2},{3,4}},{{5,6}, {7,8}},{{9,10},{11,12}}}; Dizi [0,0,0] 1 2 Dizi [0,1,0] 3 Dizi [0,1,1] 4 Dizi [1,0,0] 5 Dizi [1,0,1] 6 Dizi [1,1,0] 7 Dizi [1,1,1] 8 Dizi [2,0,0] 9 Dizi [2,0,1] 10 Dizi [2,1,0] 11 Dizi [2,1,1] 12
Düzensiz diziler (jagged arrays) Her bir elemanını ayrı bir dizi gibi düşünebileceğimiz, farklı elemanlar içeren dizilerdir. Dizi dizisi de denmektedir. int[][] dizi = new int[3][]; dizi[0]= new int [5]; dizi[1]=new int [3]; dizi[2]=new int [4]; dizi[0][0] dizi[0][1] dizi[0][2] dizi[0][3] dizi[0][4] dizi[1][0] dizi[1][1] dizi[1][2] dizi[2][0] dizi[2][1] dizi[2][2] dizi[2][3]
Düzensiz (jagged) dizi - örnek
System.Array sınıfı Diziler Array sınıfından türedikleri için sahip oldukları bazı metotlar ve özellikler söz konusudur. Özellikler IsFixedSize Dizinin eleman sayısının sabit olup olmadığını verir (bool) IsReadOnly Dizideki elemanların sadece okunabilir olup olmadığını verir (bool) Length Dizideki eleman sayısını verir (int) Rank Dizinin boyutunu verir (int)
System.Array sınıfı Metotlar BinarySearch Tek boyutlu dizilerde binary search algoritmasına göre arama yapar Clear Dizinin elemanlarını varsayılan değere çeker Join Dizi içerisindeki değerlerin tümünü bir string değişkenine, belirtilen ayırıcı karakter kullanarak aktarır Copy Dizinin bir bölümü bir başka diziye kopyalar. Gerekli tür dönüşümleri ve boxing (kutulama) işlemi yapılır. CopyTo Bir dizinin belirlenen kısmını bir başka diziye kopyalar GetLength Dizideki eleman sayısını verir. GetValue Dizideki ilgili elemanın değerini verir IndexOf Dizi içindeki bir değeri ilk görüldüğü indeksi verir Reverse Diziyi tersine çevirir. SetValue Bir dizinin bir elemanına değer atar. Sort Bir boyutlu dizileri sıralamaya yarar. CreateInstance Yeni bir dizi nesnesi oluşturur.
Dizilerin İçerdiklerini Silmek Clear () metodu dizinin içerdiklerini siler(default değere dönderir), 3 parametreye sahiptir. Array.Clear (dizi_degiskeni, baslangic, eleman_sayisi) dizi_degiskeni: elemanları sıfırlanacak dizi değişkenini baslangic: silinecek ilk elemanı eleman_sayisi: içeriği silinecek eleman sayısını
Dizilerin İçerdiklerini Silmek 1 2
Dizilerin İçerdiklerini Kopyalamak Copy() metodu [1.tür kullanım] bir dizi değişkeninin içeriğini başka bir dizi değişkenine aktarır, 3 parametreye sahiptir. (kopyalama 0. indisten başlar) Copy(kaynak_dizi, hedef_dizi, sayi) kaynak_dizi: kopyalamaya kaynaklık edecek olan dizi hedef_dizi: hedefe durumunda olan dizi sayi: içeriği kopyalanacak elemanların sayısı
Copy() [Örnek 1. tür kullanım]
Dizilerin İçerdiklerini Kopyalamak Copy() metodu [2.tür kullanım] bir dizi değişkeninin içeriğini başka bir dizi değişkenine belirlenen kadarını belirlenen indisten itibaren aktarır, 5 parametreye sahiptir. Copy(kaynak_dizi, baslagic_indis, hedef_dizi, yazilacak_indis, sayi) kaynak_dizi: kopyalamaya kaynaklık edecek olan dizi baslangic_indis: kopyalamanın başlayacağı indis (kaynak) hedef_dizi: hedefe durumunda olan dizi yazilacak_indis: yazmanın başlayacağı indis (hedef) sayi: içeriği kopyalanacak elemanların sayısı
Copy() [Örnek 2. tür kullanım]
Dizilerin İçerdiklerini Kopyalamak CopyTo() metodu bir dizinin tamamını başka bir dizinin istenilen yerine (belirlenen indisten itibaren) aktarır, 2 parametreye sahiptir. kaynak_dizi.CopyTo( hedef_dizi, sayi) kaynak_dizi: kopyalamaya kaynaklık edecek olan dizi hedef_dizi: hedefe durumunda olan dizi sayi: içeriği kopyalanacak elemanların sayısı
CopyTo() [Örnek]
Dizilerin Eleman Sayısını Öğrenmek Legth ve GetLegth() Legth özelliği ve GetLegth() metodu dizi değişkeninin eleman sayısını öğrenmek için kullanılırlar
Örnek [GetLength()]
Dizileri Sıralamak Sort() metodu dizi içeriklerini sıralamak için kullanılır. Dizi elemanlarını küçükten büyüğe doğru sıralar. Array.Sort(dizi) dizi: elemanları sıralanması istenen dizi değişkeni
Örnek [Sort()]
Dizileri Ters Çevirmek Reverse() metodu dizi içeriklerini ilk eleman sona, son eleman başa gelecek şekilde ters çevirmek kullanılır. Array.Reverse(dizi) dizi: elemanları ters çevrilmesi istenen dizi değişkeni
Örnek [Reverse()]
Dizilerde Arama Yapmak BinarySearch() IndexOf() LastIndexOf() Contains()
BinarySearch() ile arama Aranan elemanın indeks numarasını döndürür Eğer aranan eleman bulunmazsa negatif değer döndürür Dizi değişkeninin sıralanması gerekir Dört farklı sürümü vardır ve bunlardan ikisi; BinarySearch(dizi, aranan_deger) ya da BinarySearch(dizi, aranan_deger, arama_baslangic_indisi)
Örnek [BinarySearch()]
Örnek [BinarySearch()]
IdexOf() ile arama Aranan elemanın indeks numarasını döndürür Eğer aranan eleman bulunmazsa negatif değer döndürür Dizi değişkeninin sıralanması gerekmez Kullanım biçimi; IndexOf(dizi, aranan_deger)
Örnek [IndexOf()]
Örnek [IndexOf()]
LastIndexOf() ile arama Aranan elemanın indeks numarasını döndürür Eğer aranan eleman bulunmazsa negatif değer döndürür Dizi değişkeninin sıralanması gerekmez Dizi değişkeninde birden fazla aynı içeriğe sahip eleman varsa son elemanın numarasını verir Kullanım biçimi; LastIndexOf(dizi, aranan_deger)
Örnek [LastIndexOf()]
Örnek [LastIndexOf()]
Contains() ile arama Aranan elemanın var olması durumunda boolean bir değer döndürür Kullanım biçimi; Contains(aranan_deger)
Örnek [Contains()]
Örnek [Contains()]
Dizi İçeriğini Birleştirmek [Join()] Join() metodu dizi değişkeninin tüm içeriğini belirlenen ayırıcı kullanarak birleştirilmiş halini göstermek için kullanılır. Kullanım biçimi; String.Join( ayirici_karakter, dizi)
Örnek [Join()]
Örnek [Join()]
Bazı diğer metotlar Add: ArrayList sonuna eleman ekler OnikiDevAdam.Add(“Hidayet Türkoğlu); Insert: ArrayList içerisinde belirlenen yere eleman ekler OnikiDevAdam.Insert(3, “Hidayet Türkoğlu); Remove: Dizi içerisindeki elemanı siler OnikiDevAdam.Remove(“Hidayet Türkoğlu); AddRange: Bir diziye başka bir dizi ekler Basketbol.AddRange(OnikiDevAdam); InsertRange: Bir diziye belirlenen yerden itibaren başka bir dizi ekler Basketbol.InsertRange(3,OnikiDevAdam); RemoveRange: Belirtilen indisten itibaren belirtilen sayıda eleman siler Basketbol.RemoveRange(0,2); Count: Dizinin eleman sayısını gösterir Clone: Belirtilen dizinin kopyasını object türünden alır
Döngülerle dizi işlemleri for ve foreach for önceki slatylarda açıklanmıştır. foreach genellikle bir dizinin elemanlarını ekrana yazdırmak ya da dizinin elemanlarını tek tek elde etmek amacıyla kullanılır. foreach döngüsü dizinin eleman sayısı kadar döner ve iterasyonda eleman değişkeni dizinin bir sonraki elemanın değerini verir.
Örnek (foreach): foreach (char harf in textBox1.Text) listBox1.Items.Add(harf);
devam edecek…