C#'ta Diziler

Arkadaşlar geçen 2 yazıda döngüleri incelemiştik, döngülerin daha kullanışlı olabilmesi ve bir anlam ifade etmeleri için dizilerle birlikte kullanılmaları çok önemlidir.Daha doğrusu dizi kullanmadan döngülerin bize katkısı pekte fazla olmayacaktır.İşte bu yüzden bu yazıda dizi(array) yapısını inceleyeceğiz.İsterseniz hemen başlayalım..

Dizi nedir? Yapısı nasıldır?

Diziler bize aynı tipteki verilerimizi tek değişken içinde barındırabilmemizi ve daha kolay kullanabilmemizi sağlayan bir yapıdır.
Yapısı aslında çok basittir, eğer verileri tuttuğumuz yere oda dersek; dizi, tek sıra halindeki odalardan oluşur.Mesela isimler[3] = "umut"; şeklinde bir ifade; "isimler" adındaki dizimizin 3 numaralı odasına "umut" verisini koydu.Başka bir örnek vermek gerekirse; string csharp = isimler[3]; burada da oluşturduğumuz csharp isimli değişkene isimler dizisinin 3 numaraları odasındaki veriyi aktardık.Buradaki 3 sayısına "index" denir, tabi ki bu sadece 3 için geçerli değil, "dizi[x]" gibi bir satırda x olan yerdeki rakama index denir.İlk olarak tek boyutlu dizileri ve sonra çok boyutlu dizileri inceleyeceğiz.Eğer tek boyutlu diziler için konuşmak gerekirse yapısı sadece yan yana dizmekten ibarettir.Anlaşılmasıda sanırım kolay.

Dizi nasıl tanımlanır? Değer nasıl atanır?

Dizi en basit yollarla aşağıdaki gibi tanımlanır;
< veri tipi >[] < değişken ismi > = new < veri tipi >[< dizi boyutu(eleman) >];
Mesela örnek olarak int tipinde ve boyutu 10 olan bir dizi atayalım;
int[] kelime = new int[10];
Kelime adında dizimizi tanımladık, en temel olarak böyle ama mesela dizi boyutunu tanımlarken elle bir sayı girmek yerine bir değişkeni kullanabilirsiniz, tabi sayısal bir değişken olmak şartıyla;
int boyut = 20; int ilgincBirDizi = new int[boyut];
Yukarıdaki örnekte boyut adlı değişkenimizi ilgincBirDizi adındaki dizimizin boyutunu tanımlarken kullandık, yani 20 yaptık.
İsterseniz dizinin elemanlarını tanımlama anında da verebilirsiniz.Mesela;
string[] isimler = new string("Aşık veysel","Namık Kemal","Fatih Sultan Mehmet");
Yukarıda isimler adında string tipinde bir dizi tanımlayıp içerisine 3 tane veri girdik, veri girerken aralarında virgül atmalısınız.Burada "Aşık Veysel" verisine erişmek için "isimler[0]" kullanmalıyız.Çünkü dizilerde elemanlar 1'den değil 0'dan başlar ve dizinin son rakamına değer atamanaz, yani dizi[15] diye bir diziniz varsa en fazla "dizi[0]" dan "dizi[14]"'e kadar veri atayabilirsiniz.Son odada ise verilerinizin harddiskteki adresleri(pointer) tutulur.
Mesela haftanın günlerini içeren bir dizi oluşturalım;
string[] gunler = new string[7];
gunler[0] = "Pazartesi";
gunler[1] = "Salı";
gunler[2] = "Çarşamba";
gunler[3] = "Perşembe";
gunler[4] = "Cuma";
gunler[5] = "Cumartesi";
gunler[6] = "Pazar";
İsterseniz yazdığımız gunler dizisini bir örnekte kullanalım, hatırlarsanız geçen yazıda for döngüsünü incelemiştik.Şimdide for döngüsünü ve dizileri kullanarak küçük bir program yazalım;


Şimdide nasıl olduğu hakkında konuşalım; ilk olarak gunler adında, string tipinde ve 7 elemanlı bir dizi oluşturduk.Daha sonra elemanlarına sıra ile Pazartesi'den Pazar'a günleri yazdık.For döngümüzü oluşturduk.Döngünün şart kısmındaki "gunler.Lenght" bize dizinin eleman sayısını verir.Eleman sayımız 7, döngü değişkeni 0'dan başlayacak,"i < gunler.Length" yaptık çünkü dizimizin son rakamına veri giremeyeceğimiz için bir rakam küçük olana kadar dönecektir, eğer "i <= gunler.Length" yapsaydık 7'yide almak isteyecek ve program hata verecekti.Döngünün işeyişi ise;
İlk olarak i değişkeninin değeri 0'dır.Console.WriteLine(gunler[i]); satırına geldiğinde dizimizin 0. elemanını ekrana yazacak.
Döngü bir kere dönecek i değişkeni bir artırılacak ve değeri 1 olacak, Console.WriteLine(gunler[i]); satırında 1. elemanı yazacak, bu şekilde 7 kere dönecek en sonunda i değişkeninin değeri 7 olduğunda döngü kontrol edecek; 7(i) sayısı 7(gunler.Length)'den küçük müdür? Hayır, döngü duracak.
Şimdide daha açıklayıcı birşeyler yapalım;


Yukarıdaki kodlar da, elemanların dizininin kaçıncı elemanı olduğunu göstererek yazar.
Sanırım tek boyutlu diziler için bu kadar anlatım yeter.İşte bununla ilgili birkaç kaynak;

İki boyutlu diziler

Tek boyutlu dizileri inceledik şimdi sıra geldi iki boyutlu dizilerimize.İki boyutlu dizi nedir? Hatırlarsanız dizilerin tek sıra halinde dizilmiş odacıklar olduğundan bahsetmiştim,iki boyutlu diziler ise; satır ve sütunlardan oluşur.Aslında bu yabancı birşey değil, bildiğimiz tablo yapısı.Mesela Microsoft Excel'i açtığınızda gördüğünüz sayfayı dizi olarak düşünürsek, her hücre dizinin bir odası diyebiliriz.İsimlendirme sistemi ise excel ile aynıdır.Mesela ilk hücrenin adı A1'dir çünkü "A" sütununda ve 1. satırdadır.İki boyutlu dizilerde de olay aynen böyledir.
Şimdi ise 3 satır ve 3 sütunlu bir dizi tanımlayalım, içlerini doldurup iç içe for döngüsü kullanarak ekrana yazdıralım;


Kodu bir inceleyelim; gördüğünüz gibi iki boyutlu dizi tanımlama; "string[,] dizi = new string[3,3]" şeklinde, yani; < veri tipi >[,] < dizi adı > = new < veri tipi >[satır boyutu,sütun boyutu], aslında tek boyutlu dizi tanımlamadan pekte farkı yok.
Daha sonra dizimizin içini isimlerle doldurduk, dizi[0,2] ifadesi "0. satırın 2. sütunu" anlamına veya dizi[2,1] ifadesi "2. satırın 1. sütunu" anlamına gelir.
Yani boyutlandırma dizi[x,y] dersek, x = satır sayısı, y = sütun sayısı'dır.
Gelelim döngümüze; kolay anlaşılsın diye 2 döngünün sayaç değişkenlerini x ve y yaptım.İlk olarak x döngüsü başlayacak, y döngüsüne gelecek, y döngüsü 3 kere dönecek.Daha sonra x döngüsü 2. kez dönecek sonra tekrar y döngüsü 3 kez dönecek ve bu şekilde x döngüsü 3. dönüşünü de tamamladığında, dizimizi yazdırdığımız satır toplamda 9 kere dönmüş olacak ve her döndüğünde, dizinin hangi hücresini yazdıracağımızı döngü sayaçları(x,y) ile belirlediğimiz için her seferinde 1 artarak gidecektir.Yani;
Satır 0, Sütun 0 //x döngüsünün ilk turu
Satır 0, Sütun 1
Satır 0, Sütun 2
Satır 1, Sütun 0 //x döngüsünün ikici turu
Satır 1, Sütun 1
Satır 1, Sütun 2
Satır 2, Sütun 0 //x döngüsünün son turu
Satır 2, Sütun 1
Satır 2, Sütun 2
Bu şekilde yazdırıldığında ekran çıktısı değişkenlerimizi tanımladığımız sıraya göre çıkmış oldu.Tabiki değişkenlerimizi bu sıra ile tanımlamış olmamızla bir alakası yok.Diğer bir deyişle;

  • Satır 0
    • Sütun 0
    • Sütun 1
    • Sütun 2
  • Satır 1
    • Sütun 0
    • Sütun 1
    • Sütun 2
  • Satır 2
    • Sütun 0
    • Sütun 1
    • Sütun 2
Aslında dizimizin yapısı şu şekildedir;

Burada x döngüsü satırları, y döngüsüde sütunları okuyor.Haliyle satır her atladığında 3 sütunda okunuyor.Toplamda y döngüsü 9 tane sütunun hepsini okumuş oluyor.
Bu konu ile ilgili birkaç kaynak;

Çok boyutlu diziler

Arkadaşlar 2 boyutlu dizinin yapısına bildiğimiz tablo gibi demiştik.Çok boyutlu diziler aynı şekilde fakat adı üstüne çok boyutlu.Yani, satır,sütun ve derinlik kısımlarından oluşur.Zeka küpünü bilirsiniz.Çok boyutlu dizilerin yapısıda aynen buna benzer;

Zeka küpünü çok boyutlu bir dizi kabul edersek, her karesine bir veri yazabiliriz.Tabi ki her karenin tüm kenarlarına.Sarı olarak gördüğünüz yer dizinin derinlik kısmıdır.Zeka küpü gibi 3,3,3 bir diziye.27 adet veri yazılabilir.Aşağıdaki resmi inceleyiniz.Sağ taraftaki çok boyutlu bir dizidir;

Gördüğünüz gibi dizi 3 parçaya ayrılmış.Hepsi birleşirildiğinde 3 birim derinliğinde bir dizi elde ederiz.Resimdeki çok boyutlu dizi şeklinin üzerindeki rakamlarda odaların adresleridir.Çok boyutlu bir diziyi tanımlama ve veri aktarma işlemleri aşağıdaki gibidir;
string[,,] dizi = new string[3,3,3];
dizi[0, 0, 0] = "Umut";
dizi[0, 0, 1] = "Umut";
dizi[0, 0, 2] = "Umut";
dizi[0, 1, 0] = "Umut";
dizi[0, 1, 1] = "Umut";
dizi[0, 1, 2] = "Umut";
dizi[0, 2, 0] = "Umut";
dizi[0, 2, 1] = "Umut";
dizi[0, 2, 2] = "Umut";
dizi[1, 0, 0] = "Umut";
dizi[1, 0, 1] = "Umut";
dizi[1, 0, 2] = "Umut";
dizi[1, 1, 0] = "Umut";
dizi[1, 1, 1] = "Umut";
dizi[1, 1, 2] = "Umut";
dizi[1, 2, 0] = "Umut";
dizi[1, 2, 1] = "Umut";
dizi[1, 2, 2] = "Umut";
dizi[2, 0, 0] = "Umut";
dizi[2, 0, 1] = "Umut";
dizi[2, 0, 2] = "Umut";
dizi[2, 1, 0] = "Umut";
dizi[2, 1, 1] = "Umut";
dizi[2, 1, 2] = "Umut";
dizi[2, 2, 0] = "Umut";
dizi[2, 2, 1] = "Umut";
dizi[2, 2, 2] = "Umut";
Bu dizimizi ekrana yazmak için satır(x), sütun(y), derinlik(z) için ayrı ayrı 3 tane for döngüsü kullanabiliriz.Aslında dizi mantığını kavradığınızda 500 boyutlu bile olsa hemen anlarsınız, bu yüzden eğer diziyi tam olarak sindirmediyseniz bu satırları boşuna okumayın, başa dönün tekrar edin :)


İşte bu kadar, dizilerimiz de burada sona eriyor :)Umarım anlatabilmişimdir.İyi Günler..
Umut Coşkun

1 yorum:

Umut Coşkun dedi ki...

Arkadaşlar zeka küpü ve 3 boyutlu dizi resimleri alıntıdır.

Yorum Gönder