Yükleniyor...

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:


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.
  • for ve foreach ile dizi üzerinde gezilebilir.
  • Çok boyutlu ve düzensiz (jagged) diziler desteklenir.
  • Array sı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# Temel Veri Tipleri

C#’ta temel veri tipleri: sayısal, metinsel, mantıksal, nesne tabanlı ve nullable tiplerin kullanımı.