C#’ta Dizi Yapısı

C#’ta bir dizi, doğrudan ulaşılabilen sayısı belli üyeleri içeren bir veri yapısıdır. Dizinin içindeki elemanlar, dizi elemanları, hepsi aynı tipte ve bu tip dizi elemanlarının tipi olarak adlandırılır.

Dizi tipleri birer referans tipidir ve dizi elemanlarının tanımlanması bu dizi örneğine referans içerir. Gerçek dizi örneği dinamik olarak runtime zamanında new operatörü kullanılarak elde edilir. New operatörü kullanılarak dinamik olarak dizilere bellek ayrılır. New operatörü otomatik olarak dizi elamanlarının default değerlerini ilk kullanıma hazırlar. Örneğin; tüm sayısal tipler için 0, tüm referans tipler için ise null.

Örneğin aşağıdaki örnek, bir int dizisi yaratıp, ilk kullanıma hazırlayıp, sonra da çıktılarını gösteren bir örnektir;

using System;

class Test 
{ 
    static void Main() 
    { 
        int[] dizi = new int[10]; 
        for (int i = 0; i < dizi.Length; i++ ) 
        { 
            dizi[i] = i * i; 
        } 
        for (int j = 0; j < dizi.Length; j++ ) 
        { 
            Console.WriteLine("dizi[{0}] = {1}", j, dizi[j]); 
        } 
    } 
}

Buradaki örnekte tek bir boyutlu dizi ile çalıştık. C# birden fazla boyutlu dizi kullanımına izin vermektedir. Bir dizinin boyut numarası aynı zamanda o dizi tipinin rank’ı olarak ta bilinir. Bir dizinin boyut sayısını dizi tanımında kullanılan dizinin içindeki virgül sayısını bir arttırarak bulabiliriz. Aşağıdaki örnekler bir, iki ve üç boyutlu dizilere örneklerdir;

int[] dizi1 = new int[10]; 
int[,] dizi2 = new int[10, 5]; 
int[, ,] dizi3 = new int[10, 5, 2];

dizi1 dizisi 10 elemana, dizi2 dizisi 50 (10 * 5) elemana ve dizi3 dizisi de 100 (10 * 5 * 2) elemana sahiptirler.

Bir dizinin eleman tipi herhangi bir tip olabilir hatta dizi tipinde bile olabilir. Dizi tipindeki elemanlara sahip dizilere Jagged array adı verilir çünkü bu dizinin elemanlarının uzunlukları aynı olmak zorunda değildir. Aşağıdaki örnek int dizi tipi içeren elementlere sahip olan bir diziyi ifade eder.

int[ ][ ] dizi = new int[3][ ]; 
dizi[0] = new int[10]; 
dizi[1] = new int[7]; 
dizi[2] = new int[20];

array-1

Yukarıdaki ilk satır, 3 elemanlı bir dizi oluşturur, bu elemanların hepsi int[] tipinde ve hepsinin varsayılan değeri null’dır. Altındaki satırlar, bu int[] tipindeki dizi elemanlarının uzunluklarını belirlerler.

Unutmayın ki new operatörü { } sınır belirleyiciler içinde dizinin elemanlarına ilk oluşturulma anında değer atamaya imkan verir.

int[ ] dizi = new int[ ] { 1, 2, 3 };

Hatta bu kullanımı aşağıdaki şekilde kısaltabiliriz de.

int[] dizi = { 1, 2, 3 };

Bu iki kullanım da aşağıdaki gösterilen adımlara eşittir:

int[ ] t = new int[3]; 
t[0] = 1; 
t[1] = 2; 
t[2] = 3; 
int[ ] dizi = t;

Dizilerde referans atama konusunda tıpkı nesneler gibi, bir diziyi diğer diziye atadığınızda sadece değişkenin ilişkili olduğu nesneyi değiştiriyorsunuz. Örneğin aşağıdaki programda, dizi tanımlamaları yapılan dizi1 ve dizi2 dizileri, atama yapıldıktan sonra her iki dizi referans değişkenleri de aynı nesneyi gösterdiğinden dizi değerleri aynı olur.

using System;

class Test 
{ 
    static void Main() 
    { 
        int[] dizi1 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 
        int[] dizi2 = { 0, -1, -2, -3, -4, -5, -6, -7, -8, -9 };

        dizi2 = dizi1;

        foreach(var i in dizi1) 
        { 
            Console.Write(dizi1[i]); 
        }

        Console.WriteLine();

        foreach (var i in dizi2) 
        { 
            Console.Write(dizi2[i]); 
        } 
    } 
}

Çıktı:

0123456789

0123456789 Press any key to continue . . .