C# Diziler (Array)
C#’ta dizileri (array) öğrenin. Eleman ekleme, erişim, döngülerle gezinme ve temel array işlemleri örneklerle anlatılıyor.
C# dilinde diziler (arrays), aynı türden birden fazla değeri bellekte ardışık olarak saklamak için kullanılır.
İndeksleme sayesinde elemanlara hızlı erişim sağlanır. Bu makalede dizi tanımlamadan çok boyutlu dizilere,
Array sınıfı metotlarından pratik örneklere kadar detaylı bir giriş yapılacaktır.
Dizi Nedir?
Dizi, aynı türden verilerin ardışık bellek hücrelerinde saklandığı yapılardır. Her elemana bir indeks numarası ile erişilir. İndeksler 0’dan başlar.
int[] sayilar = new int[5]; // 5 elemanlı bir int dizisi
Dizi Tanımlama ve Başlangıç Değerleri
Dizi tanımlanırken boyutu belirtilir. Elemanlara değer atanmadığında varsayılan değerler geçerlidir:
int→ 0bool→ falsestring→ null
string[] isimler = new string[3];
Console.WriteLine(isimler[0]); // null
Diziye Eleman Atama ve Erişim (İndeksleme)
İndeks numarası ile elemanlara erişilir. İndeksler 0’dan başladığı için son eleman Length - 1 konumundadır.
int[] notlar = new int[5];
notlar[0] = 85;
notlar[1] = 90;
notlar[2] = 70;
notlar[3] = 75;
notlar[4] = 60;
Console.WriteLine(notlar[1]); // 90
Console.WriteLine(notlar[^1]); // 60, Bu son elemanı verir (Length - 1)
int[] altNotlar = notlar[1..4]; // Alt dizi: 90, 70, 75
notlar[5] = 100; // Bu satır IndexOutOfRangeException hatası verir
Dizinin boyutu dışındaki indis değerleri atama ve erişim işlemlerinde IndexOutOfRangeException hatası verir. dizi[4] şeklinde tanımlı dizinin elemanları 0, 1, 2, 3'tür. -1, 4 veya 5 gibi bu değerlerin dışında verilen değerler hata döndürür. İlk elemana her zaman 0 indisi ile erişilir.
Dizi Başlatma Kısayolları
Dizi oluştururken değerleri doğrudan verebilirsiniz.
int[] sayilar = { 10, 20, 30 };
var harfler = new char[] { 'A', 'B', 'C' };
Döngülerle Dizi Üzerinde Gezinme
Dizi elemanlarına erişmek için for ve foreach döngüleri kullanılır.
int[] sayilar = { 3, 6, 9 };
// for ile
for (int i = 0; i < sayilar.Length; i++)
Console.WriteLine(sayilar[i]);
// foreach ile
foreach (var s in sayilar)
Console.WriteLine(s);
Çok Boyutlu Diziler (2D, 3D)
Birden fazla boyuttan oluşan diziler tablo veya matris gibi verileri tutmak için kullanılır. Elemanlara indekslerle erişilebilir veya iç içe döngülerle tüm elemanlar üzerinde gezilebilir.
int[,] matris = new int[2, 3]
{
{1, 2, 3},
{4, 5, 6}
};
Console.WriteLine(matris[1, 2]); // 6
// İç içe for döngüsü ile gezinme
for (int i = 0; i < matris.GetLength(0); i++) // satır
{
for (int j = 0; j < matris.GetLength(1); j++) // sütun
{
Console.Write(matris[i, j] + " ");
}
Console.WriteLine();
}
// Çıktı:
6
1 2 3
4 5 6
Düzensiz Diziler (Jagged Arrays)
Düzensiz dizilerde, her satır farklı uzunlukta olabilir. Bu, matrislerden farklıdır.
int[][] jagged = new int[3][];
jagged[0] = new int[] {1, 2};
jagged[1] = new int[] {3, 4, 5};
jagged[2] = new int[] {6};
Console.WriteLine(jagged[1][2]); // 5
Array Sınıfı ve Faydalı Metotlar
C#’ta tüm diziler Array sınıfından türemiştir. Sık kullanılan metotlar:
int[] sayilar = { 5, 2, 9, 1, 7 };
Array.Sort(sayilar); // Sıralama
Array.Reverse(sayilar); // Ters çevirme
int index = Array.IndexOf(sayilar, 9); // Eleman arama
Console.WriteLine(index);
Örnek Uygulama: Öğrenci Notları
Aşağıdaki örnekte öğrencilerin notları bir dizide saklanmış ve ortalaması hesaplanmıştır.
int[] notlar = { 80, 70, 95, 60, 100 };
int toplam = 0;
foreach (var n in notlar)
toplam += n;
double ortalama = (double)toplam / notlar.Length;
Console.WriteLine($"Ortalama: {ortalama}");
TL;DR
- Diziler aynı türden verileri ardışık bellekte saklar.
- İndeksler 0’dan başlar, varsayılan değerler tipin default değeridir.
forveforeachile dizi üzerinde gezilebilir.- Çok boyutlu ve düzensiz (jagged) diziler desteklenir.
Arraysınıfı dizilerle ilgili faydalı metotlar sunar.
Örnek Uygulama: Yarışmacı Puanları
Bu örnekte kullanıcıdan yarışmacı sayısı ve her yarışmacının puanı alınarak,
toplam ve ortalama puan hesaplanmaktadır.
Girilen değerlerin geçerli tam sayı olup olmadığı int.TryParse ile kontrol edilir.
using System;
using System.Linq;
class Program
{
static void Main()
{
int[] puanlar = null;
int adet = 0;
Console.Write("Yarışmacı adedi: ");
// Ekrandan okunan sayı string olarak girilirken int türüne dönüştürülüyor
if (!int.TryParse(Console.ReadLine(), out adet))
{
// Dönüştürülemezse bu uyarı ile program sonlanıyor
Console.WriteLine("\n\nTam sayı olmayan bir değer girildi.");
return;
}
else if (adet > 10 || adet < 3)
{
// Dönüştürülürse ama değer 10'dan büyük veya 3'ten küçükse geçersiz kabul ediliyor
Console.WriteLine("\n\nGeçersiz sayıda yarışmacı adedi girildi.");
return;
}
// Dönüştürülürse girilen sayı büyüklüğünde dizi tanımlanıyor.
puanlar = new int[adet];
int i = 0;
// Döngü başlıyor
while (i < puanlar.Length)
{
// Her yarışmacının puanı tek tek giriliyor
Console.Write($"{i + 1}. yarışmacı: ");
if (!int.TryParse(Console.ReadLine(), out puanlar[i]))
{
// Girilen değer yine geçersiz bir sayı ise döngü bu uyarıdan sonra sonlanıyor
Console.WriteLine("\n\nTam sayı olmayan bir değer girildi.");
break;
}
i++;
}
// Döngü bitince toplam puan ve ortalama ekrana yazılıyor
Console.WriteLine($"Toplam puan: {puanlar.Sum()}");
Console.WriteLine($"Ortalama puan: {puanlar.Average()}");
}
}
İlişkili Makaleler
C# Döngüler (for, foreach, while, do-while)
C#’ta for, foreach, while ve do-while döngülerinin nasıl kullanıldığını öğrenin. Tekrar eden işlemleri yönetmek için pratik örnekler keşfedin.
C# Generic Yapıları (List<T>, Dictionary<TKey,TValue>)
C# generic yapılarını öğrenin. List<T> ve Dictionary<TKey,TValue> ile tip güvenliği, yeniden kullanılabilirlik ve pratik örnekler.
C# Koleksiyonlar: List, Dictionary, Queue, Stack
C# koleksiyonlarını öğrenin: List, Dictionary, Queue ve Stack. Veri yönetimi, ekleme/çıkarma ve kullanım senaryoları örneklerle.
C# Temel Veri Tipleri
C#’ta temel veri tipleri: sayısal, metinsel, mantıksal, nesne tabanlı ve nullable tiplerin kullanımı.