C# dizisi bir nesne veya tür koleksiyonudur. C# dizi öğeleri, diğer dizi türleri de dahil olmak üzere herhangi bir türde olabilir. Bir dizi, Tek Boyutlu, Çok Boyutlu veya İç içe olabilir.
C# ‘da bir dizi dizini sıfırdan başlar. Bu, bir dizinin ilk öğesinin 0. konumdan başladığı anlamına gelir. Bir dizideki son öğenin konumu toplam öğe sayısı – 1 olur. Dolayısıyla, bir dizide 10 öğe varsa, son 10. öğe 9. konumdadır.
C# ‘da, diziler sabit uzunluklu veya dinamik olarak bildirilebilir. Sabit uzunluktaki bir dizi önceden tanımlanmış sayıda öğeyi saklayabilir. Dinamik bir dizi önceden tanımlanmış bir boyuta sahip değil. Diziye yeni öğeler ekledikçe dinamik dizinin boyutu artar. Sabit uzunluklu veya dinamik bir dizi bildirebilirsiniz. Dinamik bir diziyi tanımlandıktan sonra statik olarak bile değiştirebilirsiniz.
Şimdi C# ‘daki dizilerin basit bildirimlerine bir göz atalım. Aşağıdaki kod snippet’i, sabit boyutu olmayan tamsayı türlerinin en basit dinamik dizisini tanımlar.
1 2 3 | int [] intArray; |
Yukarıdaki kod snippet’inden görebileceğiniz gibi, bir dizinin bildirimi bir dizi türü ve ardından köşeli ayraç ([]) ve dizinin adı ile başlar.
Aşağıdaki kod snippet’i, yalnızca 0-4 dizininden başlayarak 5 öğeyi depolayabilen bir dizi bildirir.
1 2 3 4 | int[] intArray; intArray = new int[5]; |
Aşağıdaki kod snippet’i, 0 ile 99 arasında indexleri olan 100 öğeyi depolayabilen bir dizi bildirir.
1 2 3 4 | int[] intArray; intArray = new int[100]; |
Diziler türleri
Önceki kod snippet’inde, basit bir tamsayı türü dizisinin nasıl tanımlanacağını gördük. Benzer şekilde, double, char ve string gibi her tür diziyi tanımlayabiliriz.
C# ‘da, diziler nesnelerdir. Bu, bir dizi bildirmenin dizi oluşturmadığı anlamına gelir. Bir dizi bildirdikten sonra, “new” operatörünü kullanarak bir dizi başlatmanız gerekir.
Aşağıdaki kod snippet’i, double, char, bool ve string veri türlerinin dizilerini tanımlar.
1 2 3 4 5 6 | double[] doubleArray = new double[5]; char[] charArray = new char[5]; bool[] boolArray = new bool[2]; string[] stringArray = new string[10]; |
Dizi Başlatma
Bir dizi bildirildikten sonra, bir sonraki adım bir diziyi başlatmaktır. Bir dizinin başlatma işlemi, diziye gerçek verilerin eklenmesini içerir.
Aşağıdaki kod snippet’i 3 öğeden oluşan bir dizi oluşturur ve dizi başlatıldığında bu öğelerin değerleri eklenir.
1 2 3 4 | // Sabit uzunlukta ve değerler ile dizi int[] staticIntArray = new int[3] {1, 3, 5}; |
Alternatif olarak, aşağıdaki kod snippet’inde listelendiği gibi dizi öğelerini tek tek ekleyebiliriz.
1 2 3 4 5 6 | int[] staticIntArray = new int[3]; staticIntArray[0] = 1; staticIntArray[1] = 3; staticIntArray[2] = 5; |
Aşağıdaki kod snippet’i, string değerlerine sahip dinamik bir dizi bildirir.
1 2 3 | string[] strArray = new string[] { "Ahmet", "Recep", "Hüseyin", "Ufuk", "Kazım" }; |
Diziye Erişim
Bir dizi öğesine, dizindeki öğe dizinini ileterek erişebiliriz. Aşağıdaki kod snippet’i üç öğeden oluşan bir dizi oluşturur ve bu öğeleri konsolda görüntüler.
1 2 3 4 5 6 7 8 9 10 | int[] staticIntArray = new int[3]; staticIntArray[0] = 1; staticIntArray[1] = 3; staticIntArray[2] = 5; Console.WriteLine(staticIntArray[0]); Console.WriteLine(staticIntArray[1]); Console.WriteLine(staticIntArray[2]); |
Bu yöntem, bir diziden hangi öğeye erişmek istediğinizi bildiğinizde kullanışlıdır. Dizideki öğelerden daha büyük bir öğe dizini iletmeye çalışırsanız hata alırsınız.
Foreach Loop kullanarak bir diziye erişme
Foreach kontrol ifadesi (döngü), bir dizinin öğeleri arasında yineleme yapmak için kullanılır. Örneğin, aşağıdaki kod bir dizginin tüm öğelerini okumak için foreach döngüsü kullanır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // Dinamik dizi tanımlama ve değer atama string[] strArray = new string[] { "Ahmet", "Recep", "Kazım", "Necati", "Kasım" }; // Dizi öğelerini foreach ile okuma foreach (string str in strArray) { Console.WriteLine(str); } |
Bu yaklaşım, bir dizideki öğenin tam dizinini bilmediğinizde ve tüm öğeler arasında döngü yapmanız gerektiğinde kullanılır.
Dizi Türleri
Diziler aşağıdaki dört kategoriye ayrılabilir.
- Tek boyutlu diziler
- Çok boyutlu diziler veya dikdörtgen diziler
- Düzensiz diziler
- Karışık diziler
Tek Boyutlu Diziler
Tek boyutlu diziler dizilerin en basit şeklidir. Bu tür diziler, önceden tanımlanmış türde öğelerin sayısını depolamak için kullanılır. Tek bir boyut dizisindeki tüm öğeler 0’dan -1 dizisinin boyutuna kadar bitişik olarak saklanır.
Aşağıdaki kod 3 öğeyi saklayabilecek bir tamsayı dizisi bildirir. Koddan da görebileceğiniz gibi, ilk önce [] dirseğini kullanarak diziyi bildiriyorum ve bundan sonra diziyi yeni operatörü çağırarak başlatırım.
1 2 3 4 | int[] intArray; intArray = new int[3]; |
C # ‘daki dizi bildirimleri oldukça basittir. Dizi öğelerini süslü parantezlere ({}) koyarsınız. Bir dizi başlatılmazsa, dizi bildirildiği sırada başlatılmazsa, öğeleri otomatik olarak dizi türü için varsayılan başlangıç değerine sıfırlanır.
Aşağıdaki kod, tamsayı türünde üç öğeden oluşan bir diziyi bildirir ve başlatır.
1 2 3 | int[] staticIntArray = new int[3] { 1, 3, 5 }; |
Aşağıdaki kod 5 dize öğesinden oluşan bir dizi bildirir ve başlatır.
1 2 3 4 5 6 7 8 9 | string[] strArray = new string[5]{ "Ahmet", "Recep", "Kazım", "Necati", "Kasım" }; |
new operatör kullanmadan bu değerleri doğrudan atayabilirsiniz.
1 2 3 4 5 6 7 8 9 | string[] strArrays ={ "Ahmet", "Recep", "Kazım", "Necati", "Kasım" }; |
Dinamik uzunluk dizisini aşağıdaki gibi başlatabilirsiniz,
1 2 3 4 5 6 7 8 9 | string[] strArrays = new string[] { "Ahmet", "Recep", "Kazım", "Necati", "Kasım" }; |
Çok Boyutlu Diziler
Dikdörtgen dizi olarak da bilinen çok boyutlu dizi, birden fazla boyuta sahip bir dizidir. Çok boyutlu bir dizinin formu bir matristir.
Çok boyutlu bir dizi bildirme
Çok boyutlu bir dizi şu şekilde bildirilir:
1 2 3 | string [,] mutliDimStringArray; |
Çok boyutlu bir dizi sabit boyutlu veya dinamik boyutlu olabilir.
Çok boyutlu dizileri başlatma
Aşağıdaki kod snippet’i, 3×2 ve 2×2 matrisli iki çok boyutlu diziyi tanımlayan sabit boyutlu çok boyutlu dizilere bir örnektir. İlk dizi 6 öğe, ikinci dizi 4 öğe saklayabilir. Bu dizilerin her ikisi de bildiri sırasında başlatılır.
1 2 3 4 | int[,] sayilar = new int[3, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 } }; string[,] isimler = new string[2, 2] { { "Ahmet", "Recep" }, { "Kazım", "Kasım" } }; |
Şimdi dizinin öğe sayısından emin olmadığınız çok boyutlu dinamik dizilerin örneklerine bakalım. Aşağıdaki kod snippet’i, sınırsız iki çok boyutlu dizi oluşturur.
1 2 3 4 | int[,] sayilar = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 } }; string[,] isimler = new string[,] { { "Ahmet", "Recep" }, { "Kazım", "Kasım" } }; |
Ayrıca, tek boyutlu dizilerde yaptığımız gibi new operatörü de çıkarabilirsiniz. Bu değerleri, new işleci kullanmadan doğrudan atayabilirsiniz. Örneğin:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | int[,] sayilar = { { 1, 2 }, { 3, 4 }, { 5, 6 } }; string[,] isimler = { { "Ahmet", "Recep" }, { "Kazım", "Necati" } }; |
Ayrıca dizi öğelerini tek seferde bir öğe başlatabiliriz. Aşağıdaki kod snippet’i, dizi öğelerini teker teker başlatma örneğidir.
1 2 3 4 5 6 7 8 9 | int[, ] numbers = new int[3, 2]; numbers[0, 0] = 1; numbers[1, 0] = 2; numbers[2, 0] = 3; numbers[0, 1] = 4; numbers[1, 1] = 5; numbers[2, 1] = 6; |
Çok boyutlu dizilere erişme
Çok boyutlu dizi öğeleri bir matris biçiminde temsil edilir ve öğelerine erişmek için matris boyutunu belirtmemiz gerekir. Örneğin, öğe (1,2), ikinci satırda ve üçüncü sütunda matristeki bir dizi öğesini temsil eder.
Aşağıdaki kod snippet’i, yukarıdaki kodda tanımlanan numaralar dizisine nasıl erişileceğini gösterir.
1 2 3 4 5 6 7 8 | Console.WriteLine(numbers[0, 0]); Console.WriteLine(numbers[0, 1]); Console.WriteLine(numbers[1, 0]); Console.WriteLine(numbers[1, 1]); Console.WriteLine(numbers[2, 0]); Console.WriteLine(numbers[2, 2]); |
Düzensiz Diziler (Jagged Array)
Jagged diziler dizilerin dizileridir. Jagged dizinin öğeleri diğer dizilerdir.
Jagged Dizileri Bildirme
Jagged dizinin bildirimi iki parantez içerir. Örneğin, aşağıdaki kod snippet’i, bir dizinin üç öğesinden oluşan tırtıklı bir dizi bildirir.
1 2 3 | int[][] intJaggedArray = yeni int[3][]; |
Aşağıdaki kod snippet’i, bir dizinin iki öğesi olan tırtıklı bir dizi bildirir.
1 2 3 | string[][] stringJaggedArray = yeni string[2][]; |
Jagged Dizileri Başlatma
Jagged bir dizinin kullanılabilmesi için öğelerinin başlatılması gerekir. Aşağıdaki kod parçacığı, tırtıklı bir dizi başlatır; iki tamsayı içeren bir tamsayı dizisine sahip ilk öğe, 4 tamsayı içeren bir tamsayı dizisine sahip ikinci öğe ve 6 tamsayı içeren bir tamsayı dizisine sahip üçüncü öğe.
1 2 3 4 5 | intJaggedArray[0] = new int[2]; intJaggedArray[1] = new int[4]; intJaggedArray[2] = new int[6]; |
Ayrıca, dizinin öğelerinin değerlerini sağlayarak jagged bir dizinin öğelerini başlatabiliriz. Aşağıdaki kod snippet’i, bir dizi öğelerini bildirim sırasında doğrudan başlatır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | int[][] intJaggedArray = new int[3][]; intJaggedArray[0] = new int[2] { 2, 12 }; intJaggedArray[1] = new int[4] { 4, 14, 24, 34 }; intJaggedArray[2] = new int[6] { 6, 16, 26, 36, 46, 56 }; |
Jagged Dizilere Erişim
Jagged dizinin öğelerine ayrı ayrı aşağıdaki şekilde erişebiliriz:
1 2 3 4 | Console.Write(intJaggedArray3[0][0]); Console.WriteLine(intJaggedArray3[2][5]); |
Ayrıca, tırtıklı bir dizinin tüm öğeleri arasında geçiş yapabiliriz. Bir dizinin Length özelliği çok yardımcı olur; bize bir dizideki öğe sayısını verir. Aşağıdaki kod snippet’i, tırtıklı bir dizinin tüm öğeleri arasında dolaşır ve bunları ekranda görüntüler.
1 2 3 4 5 6 7 8 9 | for (int i = 0; i < intJaggedArray3.Length; i++) { System.Console.Write("Element({0}): ", i); for (int j = 0; j < intJaggedArray3[i].Length; j++) { System.Console.Write("{0}{1}", intJaggedArray3[i][j], j == (intJaggedArray3[i].Length - 1) ? "" : " "); } System.Console.WriteLine(); } |
Karışık Diziler
Karışık diziler çok boyutlu dizilerin ve tırtıklı dizilerin bir kombinasyonudur. Karışık diziler türü .NET 4.0’dan kaldırılır. Gerçekten karışık diziler kullanmadım. Çok boyutlu ve tırtıklı dizilerin yardımıyla istediğiniz her şeyi yapabilirsiniz.
Basit Bir Örnek
Liste 1’de listelenen, her türlü dizinin nasıl bildirileceğini, sonra nasıl başlatılacağını ve bunlara nasıl erişileceğini gösteren tam bir örnek.
Bu kodu sınamak için Visual Studio 2010 veya Visual C# Express kullanarak bir konsol uygulaması oluşturun ve bu kodu kopyalayıp yapıştırın.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | class Program { static void Main(string[] args) { Console.WriteLine("Tek Boyutlu Dizi"); // Single dim array string[] strArray = new string[] { "Ali", "Ahmet", "Recep" }; // foreach ile dizi okuma foreach (string str in strArray) { Console.WriteLine(str); } Console.WriteLine("-----------------------------"); Console.WriteLine("Çok Boyutlu Dizi Örneği"); string[,] string2DArray = new string[2, 2] { { "Ali", "Ahmet" }, { "Recep", "Kazım" } }; foreach (string str in string2DArray) { Console.WriteLine(str); } Console.WriteLine("-----------------------------"); Console.WriteLine("Jagged Dizi Örnekleri"); int[][] intJaggedArray3 = { new int[] { 2, 12 }, new int[] { 14, 14, 24, 34 }, new int[] { 6, 16, 26, 36, 46, 56 } }; for (int i = 0; i < intJaggedArray3.Length; i++) { Console.Write($"Element({i}): "); for (int j = 0; j < intJaggedArray3[i].Length; j++) { Console.Write($"{intJaggedArray3[i][j]} "); } Console.WriteLine(); } Console.WriteLine("-----------------------------"); Console.ReadLine(); } } |
Çıktı:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Tek Boyutlu Dizi Ali Ahmet Recep ----------------------------- Çok Boyutlu Dizi Örneği Ali Ahmet Recep Kazım ----------------------------- Jagged Dizi Örnekleri Element(0): 2 12 Element(1): 14 14 24 34 Element(2): 6 16 26 36 46 56 ----------------------------- |
Dizi Özellikleri
Tablo 1’de Array sınıfı özellikleri açıklanmaktadır.
IsFixedSize | Bir dizinin sabit bir boyutu olup olmadığını belirten bir değer döndürün. |
IsReadOnly | Bir dizinin salt okunur olup olmadığını gösteren bir değer döndürür. |
LongLength | Bir dizinin tüm boyutlarındaki toplam öğe sayısını temsil eden 64 bitlik bir tam sayı döndürür. |
Length | Bir dizinin tüm boyutlarındaki toplam öğe sayısını temsil eden 64 bitlik bir tam sayı döndürür…. |
Rank | Bir dizinin boyut sayısını döndürür. |
Aşağıdaki kod snippet’i bir dizi oluşturur ve özellik değerlerini görüntülemek için Dizi özelliklerini kullanır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class Program { static void Main(string[] args) { int[] intArray = new int[3] { 0, 1, 2 }; if (intArray.IsFixedSize) { Console.WriteLine("Dizi Sabit Uzunluktadır"); Console.WriteLine($"Genişlik : {intArray.Length.ToString()}"); Console.WriteLine($"Boyut : {intArray.Rank.ToString()}"); } Console.ReadLine(); } } |
1 Yorum