Merhaba, Diziler ile ilgili devam niteliğinde, ikinci bir makale yazacağımı söylemiştim. İlk makaleyi yazdığımdan beri epey zaman geçti. İşler güçler derken ancak vakit bulabildim. Kaldığımız yerden devam edelim…
DERS 7 : Diziler 2
İlk makalemde dizileri genel hatlarıyla anlatmıştım. Dizi nedir, nasıl değer atanır, döngüler ile beraber nasıl kullanılır vs. Bu makalemde matrisler, düzensiz diziler ve dizi metotlarından bahsedeceğim. Matrisler ile başlayalım.
Bildiğiniz gibi matrisler nxm boyutundaki tablo gibidirler. Örneğin 3×2’lik bir matrisin 6 elemanı vardır. Matrislerin programlama dilinde karşılık gelen gösterimi çok boyutlu dizilerdir. Daha doğrusu matris dediğimiz aslında 2 boyutlu dizidir. 2 boyutlu dizi basitçe şu demek, elinizde bir dizi olduğunu düşünün ve bu dizinin her elemanın da aynı boyutlu başka bir dizi olduğunu düşünün. Örneğin 3 elemanlı bir diziniz var ve bu dizinin her bir elemanı ise 2 elemanlı başka bir diziyi temsil ediyor. Aşağıda 3×2’lik bir matrisin yani iki boyutlu dizinin nasıl tanımlandığını ve değerlerin nasıl okunduğunu görebilirsiniz.
int[,] dizi = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
Console.WriteLine(dizi[0, 0]); // 1
Console.WriteLine(dizi[1, 0]); // 3
Console.WriteLine(dizi[2, 1]); // 6
Matris üzerindeki yerleşim ise şu şekilde olacaktır:
Peki eğer, değerleri diziyi tanımlarken atamak istemeyip sonradan atamak istiyorsak nasıl bir tanımlama ve değer ataması kullanmalıyız? Bunun için de aşağıdaki örnek konsol uygulamasını inceleyebilirsiniz.
using System;
namespace Ders7
{
class Program
{
static void Main(string[] args)
{
int sayi = 0;
int[,] dizi = new int[3, 4];
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
dizi[i, j] = sayi;
sayi++;
}
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
Console.Write(dizi[i, j] + " ");
}
Console.WriteLine();
}
Console.ReadKey();
}
}
}
İlk satırda, değer atamalarında kullanabilmek için bir değişken tanımlıyoruz. Ardından dizimizin tanımlamasını yapıyoruz ve dizimizin 3×4’lük bir dizi olduğunu belirtiyoruz. Dizi, iki boyutlu olduğu için iç içe iki for döngüsü kullanmamız gerekiyor. Dıştaki döngü satır sırasını belirlerken, içteki döngü sütun sırasını belirliyor. Değer atamasını ise normal dizilerde olduğu gibi dizi[1,2] = 5 şeklinde yapıyoruz. Üstteki ikili for döngüsünün ilki değer ataması yapmak için kullanılırken, alttaki ikili for döngüsü ise değerleri ekrana basmak için kullanılıyor. Yukarıdaki kodu yazıp çalıştırdığınızda aşağıdaki gibi bir ekran görüntüsü elde edeceksiniz.
Düzensiz diziler
Düzensiz dizilerin sadece ne olduğundan bahsedip geçeceğim. Çünkü bu tarz dizileri pek kullanmanız gerekmeyecek. Çok boyutlu diziler için yaptığımız tanımı hatırlayın, “Elinizde bir dizi olduğunu düşünün ve bu dizinin her elemanın da aynı boyutlu başka bir dizi olduğunu düşünün.”. Evet, düzensiz dizilerdeki tek fark, tanımda kırmızı olarak yazdığım yer. Örneğin elimizde 3 elemanlı bir dizi var. Bu dizinin her bir elemanı ise başka bir dizi. Eğer bu dizilerin boyutları eşit ise çok boyutlu dizi, dizilerin boyutları farklı ise düzensiz dizi adını alıyorlar. Aşağıda düzensiz dizi tanımlamasını ve bu dizinin nasıl göründüğünü bulabilirsiniz.
int[][] dizi = new int[3][];
dizi[0] = new int[2];
dizi[1] = new int[4];
dizi[2] = new int[3];
Makalemizin son konusu ise dizi metotları. Metot nedir? Önceden yazılmış, belirli işlemleri yapmaya yarayan kod bloklarıdırlar. Mesela elinizde bir sayı dizisi var ve sayıları sıralamak istiyorsunuz. Elbette ki kendi kodunuzu yazabilirsiniz; ancak daha önceden yazılmış olan Sort() metodunu kullanabilirsiniz. Aşağıda dizilerle alakalı olarak sıkça kullanılabilecek metodları açıklamaya çalıştım. Bu metodları herhangi bir dizi değişkeninin sonuna “.” koyduktan sonra yazabilirsiniz. Metodların açıklamalarından sonra, altta örnek birkaç tane de kod ekledim, onlardan faydalanabilirsiniz.
- CopyTo: Bir dizinin bir bölümünü veya tamamını başka bir diziye kopyalamanızı sağlar.
- GetLength: Dizinin uzunluğunu verir.
- SetValue: Dizi içerisindeki herhangi bir alana değer atamanızı sağlar.
Değişkenin sonuna “.” koyarak çağırabileceğiniz bu metotlar dışında, diziler için genel olarak tasarlanan başka metotlar da vardır. Bu metotları ise “Array.” diyerek çağırabilirsiniz. Aşağıda bu metotlardan bazılarını açıklamaya çalıştım.
- BinarySearch: Verilen dizi içerisinde istediğiniz bir elemanı arar.
- Clear: Dizinin elemanlarının bir kısmını veya tamamını silmenizi yani varsayılan değere çekmenizi sağlar.
- IndexOf: Aradığınız bir değerin dizinin kaçıncı elemanı olduğunu öğrenmenizi sağlar (birden fazla varsa ilkini söyler).
- LastIndexOf: Aradığınız bir değerin dizinin kaçıncı elemanı olduğunu öğrenmenizi sağlar (birden fazla varsa sonuncusunu söyler).
- Reverse: Diziyi tersine çevirir. İlk eleman artık son eleman olur.
- Sort: Diziyi sıralar.
using System;
namespace Ders7
{
class Program
{
static void Main(string[] args)
{
int[] dizi = new int[] { 3, 4, 1, 2 };
dizi.GetLength(0); // Tek boyutlu diziler için 0 yazılır. Sonuç: 4
dizi.SetValue(5, 3); // "2" değerini "5" olarak değiştirir.
int sira = Array.IndexOf(dizi, 1); // dizi içerisinde "1" elemanının sırasını söyler. Sonuç: 2
Console.WriteLine(sira); // 2
Array.Reverse(dizi); // Diziyi tersine çevirir. Sonuç: 5, 1, 4, 3
Array.Sort(dizi); // Diziyi küçükten büyüğe sıralar. Sonuç: 1, 3, 4, 5
//dizi'nin son halini yazdıralım... 1, 3, 4, 5 olmasını bekliyoruz
for (int i = 0; i < dizi.GetLength(0); i++)
{
Console.Write(dizi[i] + " ");
}
Console.ReadKey();
}
}
}
Bu makalemizin de sonuna geldik. Bir sonraki makalemizde metotları ve fonksiyonları anlatmaya çalışacağım. Yavaş yavaş eğlenceli kısımlara geçiyor olacağız. Şunu da belirteyim ki daha yeni başlıyoruz ve yazmam gereken birçok konu var. Hatalı gördüğünüz veya konuyla ilgili öğrenmek istediğiniz noktaları, aşağıdaki yorum kısmından bana iletebilirsiniz. Bir sonraki makalede görüşmek dileğiyle…