Yakın bir zamanda(Ekim 2008) yayınlanan C# 3.0 kitabımda düzensiz dizilerle ilgili olarak yazdıklarım, 2004 yılında yayınlanan ilk C# kitabımda yazdıklarımdan pek farklı değildir. Bu makalede ilk C# kitabımda düzensiz dizilerle ilgili olarak yazdıklarımı küçük ekleme ve değişikliklerle size sunacağım.
Aşağıda verilen tabloyu Word ile hazırladım. İlk tabloda 3 sütun ve 4 satır bulunmaktadır ve her satırda aynı sayıda hücre bulunmaktadır. Ancak aynı sütun sayısına sahip olan 2. tablo ilki gibi düzenli olmayıp her satırda farklı sayıda hücre bulunmaktadır. 1995 yılında önce Word hakkında son derece kapsamlı bir kitap yazmış birisi olarak bu temsili Word tablosu için birileri “bizim kitaptan izinsiz alıntı yapılmış” derlerse ne demek gerektiğini sizlere bırakıyorum.

C# projeleri dahilinde hazırlanan çok boyutlu dizi değişkenlerde her satırda aynı sayıda eleman yoksa bu tip dizi değişkenlere düzensiz(jagged) dizi değişken adı verilmektedir. Şimdi burada verdiğim 2. Word tablosu ile aynı sayıda satır, sütun ve elemana sahip düzensiz bir dizi değişken tanımlayacağım. 2. tabloda 4 satır olduğu için ilk olarak aşağıda verilen satır ile satır sayısı 4 olan 2 boyutlu bir dizi değişken tanımladım. Aşağıda verdiğim kodda tanımladığım dizi değişkene "basket" adını vermiş olmam beni kurtarmıştır. Çünkü mesleğinin zirvesinde bulunan başka yazarlar ilk C# kitabım yayınlanmadan önce "basket" adında dizi değişken tanımlamamışlar. Böylece kitabımın bu sayfaları için değişken adı çalma suçlamasından yırtmış bulunuyorum.

Aslında bu satır ile 4 satırlı ve 2 boyutlu(matris) dizi değişken tanımlanmaktadır. Ancak 2 boyutlu olan bu dizi değişkenin sütunları henüz tanımlı değildir. Şimdi 2 boyutlu bu dizi değişkenin sütunlarını tanımlayacağım. Sütunların eleman sayısı birbirinden farklı olduğu için her sütunu ayrı tanımlamak gerekiyor. Bu işlemin nasıl yapıldığını aşağıda görebilirsiniz.

Bu satırlar sayesinde tanımlanan düzensiz dizi değişkenin ilk satırında 3, 2. satırında 2 eleman bulunmaktadır. Bu örnekte düzensiz dizi değişkeni ve dizi değişkenşn satırlarını ayrı zamanda tanımladım. Düzensiz dizi değişkenin satırlarının eleman sayısı kod yazılırken belli ise bu işlemi aşağıda yapıldığı gibi tek satırda çözebilirsiniz.
string[][] basket = {new string[3], new string[2], new string[3], new string[1]};
Bu satır, yukarıda verilen 5 satır ile aynı işleve sahiptir. Anlatılan şekilde tanımlanan dizi değişkenin elemanlarına istediğiniz gibi bilgi aktarabilirsiniz. Aşağıda verilen satırlar ile bu dizi değişkenin elemanlarına bilgi aktarılmaktadır.
basket[0][0] = "Kerem";
basket[0][1] = "Harun";
basket[0][2] = "Tutku";
basket[1][0] = "İbrahim";
basket[1][1] = "Hidayet";
basket[2][0] = "Alper";
basket[2][1] = "Mirsat";
basket[2][2] = "Kaya";
basket[3][0] = "Mehmet";
Mesleğinin zirvesinde bulunan yerli yazarın birisi .NET programcılığına katkı olması için konu düzensiz diziler olduğunda Yer Gösterme adında yeni bir kavram geliştirmiştir. Ancak yukarıda verilen kodda yer gösterme işlemi nerededir bilmiyorum. Keşke düzensiz dizilerle ilgili olarak yer gösterme buluşunu yapan yerli yazar ve kendisine destek olan öğretim üyesi yer gösterme işleminin nasıl bir şey olduğunu bize anlatmış olsaydılar. Madem bir hizmet yaptılar bari bunu tam yapsaydılar.
Bu şekilde tanımlayıp bilgi aktardığınız dizi değişkenin elemanlarının içeriklerini istediğiniz gibi kullanabilirsiniz. Aşağıda verilen satırlar sayesinde bu dizi değişkenin ilk satırın içeriği ekrana yazılmaktadır. Belki yer gösterme işlemi aşağıda verilen koddadır, dikkatli bakmak gerekir(!). Koskoca öğretim üyesine göre Memik Yanık’ın ilk C# kitabının düzensiz dizilerle ilgili sayfalarında yer gösterme işleminden söz ettiğine göre mutlaka bir yerlerde vardır bu işlem(!).
Tekrar etmek gerekirse bu makalenin başlığına dikkatlice bakmış olanların fark etmiş olacağı gibi yer gösterme işleminden söz edilmektedir. Bu yer gösterme kavramıyla Türk bilişim dünyası ilk kez 2003 yılında C# konulu kitap yazmış bir yazar sayesinde tanıştı. Her ne kadar konu düzensiz diziler olduğunda yer gösterme gibi bir kavram olmasa bile yerli yazarımızı bu buluşundan dolayı ve kendilerine bu konuda destek veren prof unvanlı Ankaralı öğretim üyesini taktir etmek gerekir(!). Sinema ve tiyatrolardaki yer gösterme işlemini C# kodu içinde düzensiz dizilere uygulamak kolay olmasa gerek.
Konunun iyice anlaşılmasını sağlamak için konsol uygulamasına yazdığım bu dizi değişken tanımlama satırlarını Visual Studio ile hazırladığım C# projesine taşıyıp elemanların içeriklerini 4 ayrı liste kutusuna aktaracağım. Bu amaçla forma 4 liste kutusu yerleştirdim ve formun Click olayını temsil eden metoda aşağıda verdiğim satırları yazıp düzensiz dizinin elemanlarının içeriklerini liste kutularına aktardım. Tabii forma ListBox yerleştirmeyi ilk kez 2003 yerli bir yazar akıl ettiği için bu durumda bu yazarın fikri haklarına tecavüz etmiş oluyorum(!).
listBox1.Items.Add(basket[0][0]);
listBox1.Items.Add(basket[0][1]);
listBox1.Items.Add(basket[0][2]);
listBox2.Items.Add(basket[1][0]);
listBox2.Items.Add(basket[1][1]);
listBox3.Items.Add(basket[2][0]);
listBox3.Items.Add(basket[2][1]);
listBox3.Items.Add(basket[2][2]);
listBox4.Items.Add(basket[3][0]);
Bu örnekte düzensiz dizi değişken üzerinde işlem yapmak üzere kod yazarken dizi değişkenin satır ve sütun sayısını gözettim. Ancak tanımlanan dizi değişkenin eleman sayısı önceden bilinmeyeceği için kod yazarak düzensiz dizileri bu şekilde kullanmak pratik değildir. Bu satırları yazdığım metodu işletince aşağıdaki gibi bir sonuç elde ettim.

Düzensiz dizilerin elemanlarına tanımlama satırında ilk değer atayabilirsiniz. Aşağıda verilen satır bir metoda yazılıp işletilirse düzensiz dizi değişkenin ilk satırında 2, 2. satırında ise 3 eleman olan bir düzensiz dizi tanımlanmış olur.
string[][] basket = new string[][] {new string[]
{"İbrahim", "Hidayet"}, new string[]
{"Mehmet", "Mirsat", "Kerem"}};
Bu şekilde ilk değer ataması yapılarak tanımlanan düzensiz dizi değişkenin elemanlarının içerikleri aşağıda verilen satırlar ile ekrana yazılabilinir.
Console.WriteLine(basket[0][0]);
Console.WriteLine(basket[1][1]);
Console.WriteLine(basket[1][0]);
Console.WriteLine(basket[1][1]);
Console.WriteLine(basket[1][2]);
Tanımlayıp değer aktardığınız düzensiz dizi değişkenin kaç satıra sahip olduğunu öğrenmek istiyorsanız Array sınıfının GetLength() metodunu kullanabilirsiniz. Aşağıda verilen satırlar bir konsol uygulamasına yazılıp işletilirse 4 değeri elde edilir. Çünkü bu satırlar ile tanımlanan “basket” adını vermiş olduğum düzenisiz dizi 4 satıra sahiptir.
string[][] basket = new string [4][];
basket[0] = new string[3];
basket[1] = new string[2];
basket[2] = new string[3];
basket[3] = new string[1];
Console.WriteLine(Convert.ToInt32(basket.GetLength(0))); // ekrana 4 yazılır.
Bazılarına göre 2004 yılında ilk C# kitabımda bu şekilde anlattığım düzensiz dizileri o günlerde Dünyada bir tek yerli bir yazar biliyordu. Bu yazar ayrıca düzensiz diziler hakkında bir şeyler yazma hakkını(tıpkı süper ligin yayın hakkını Digiturk’ün satın alması gibi) satın aldığı(!) için düzensiz diziler hakkında bir şeyler yazmak suç teşkil ediyor. Lütfen dikkatli olalım.