Diziler

Değişkenleri incelerken gördük ki, değişkenlere sadece bir kere değer atayabiliriz. Yeni atadığımız değer eskisinin yerine gelecektir.

Bazı durumlar olur ki, birden fazla değer depolamamız gerekebilir. Burada devreye diziler giriyor.

Diziler bünyesinde birden fazla değer saklar.

Dizi Tanımlama:

veritipi[] diziadi = new veritipi[kapasite]; 

Yapısı yukarıdaki gibidir.

string[] veriler = new string[10];

Yukarıda; string veri tipinde, kapasitesi 10 olan ve adı veriler olan bir dizi tanımladık. Ancak henüz içi boştur.

Sadece yer ayırdık, yani tanımladık. Henüz içerisine veri atamadık.

string[] veriler;
veriler = new string[10];

İstersek yukarıdaki gibi de tanımladıktan sonra başka bir satırda da kapasitesini belirleyebiliriz.

Diziye Değer Atama:

Diziye değer atamanın birçok yolu vardır.

string[] diller = {"C#", "C", "C++", "Lua", "Java", "Delphi", "Visual Basic"};

Yukarıdaki gibi tanımlarken, kapasitesini girmeye gerek kalmadan tanımlayabilirsiniz.

string[] diller = new string[7]{"C#", "C", "C++", "Lua", "Java", "Delphi", "Visual Basic"};

Yukarıdaki gibi kapasitesini girdikten sonra da tanımlayabiliriz.

string diller = new string[7];
diller[0] = "C#";
diller[1] = "C";
diller[2] = "C++";
diller[3] = "Lua";
diller[4] = "Java";
diller[5] = "Delphi";
diller[6] = "Visual Basic";

Yukarıdaki gibi de teker teker verileri girebiliriz.

Not: Bu 3 değer atama şeklinde de aynı verileri aynı bölgelere atadık. Hiç bir değişiklik olmayacaktır.

string diller = new string[7];
diller[0] = "C#";
diller[2] = "C++";
diller[4] = "Java";
diller[5] = "Delphi";
diller[6] = "Visual Basic";

 

Yukarıda diller[1] ve diller[3] bölümlerini boş bıraktık.

Görünüşü,

diller[0] ---> C#

diller[1] ---> 

diller[2] ---> C++

diller[3] ---> 

diller[4] ---> Java

diller[5] ---> Delphi

diller[6] ---> Visual Basic

şeklinde olacaktır.

string[] diller = new string[7]{"C#", null, "C++", null, "Java", "Delphi", "Visual Basic"};

Yukarıdaki gibi de boş bırakabiliriz.

Not: Dizi tanımlamada, dizi tipi sadece string olmayabilir. İsterseniz int, double, float, bool şeklinde veri tipide kullanabilirsiniz.

Diziyi Yazdırma:

string[] diller = {"C#", "C", "C++", "Lua", "Java", "Delphi", "Visual Basic"};
foreach(string dil in diller)
{
     Console.WriteLine(dil);
}
     Console.ReadKey();

Çıktısı:


string[] diller = {"C#", "C", "C++", "Lua", "Java", "Delphi", "Visual Basic"};
Console.WriteLine("diller dizisinde " + diller.Length + " adet eleman bulunmaktadır.");
Console.ReadKey();

Yukarıdaki örnekte, diller dizisinin eleman sayısı verip yazdıran programın kodlarını yazdıran programın kodları yer almaktadır.

Çıktısı:


Clear:

Dizinin belirlediğiniz kısmını veya tamamını temizlemenizi sağlar.

Array.Clear(diziadi,baslangicindexi,adet);

Yukarıdaki gibi bir yapısı vardır.

string[] diller = { "C#", "C", "C++", "Lua", "Java", "Delphi", "Visual Basic" };
Console.WriteLine("----- Temizlemeden önceki dizi: -----");
for (int i = 0; i <= 6; i++)
{
    Console.WriteLine("diller[" + i + "] = " + diller[i]);
}
Array.Clear(diller, 1, 5);
Console.WriteLine("----- Temizlendikten sonraki dizi: -----");
for (int m = 0; m <= 6; m++)
{
    Console.WriteLine("diller[" + m + "] = " + diller[m]);
}
Console.ReadKey();

Çıktısı:


Reverse:

Dizideki elemanları tersine çevirir.

string[] diller = { "C#", "C", "C++", "Lua", "Java", "Delphi", "Visual Basic" };
Console.WriteLine("---- Önce ----");
for (int i = 0; i <= 6; i++)
{
     Console.WriteLine("diller[" + i + "] = " + diller[i]);
}
Array.Reverse(diller);
Console.WriteLine("---- Sonra ----");
for (int m = 0; m <= 6; m++)
{
     Console.WriteLine("diller[" + m + "] = " + diller[m]);
}
Console.ReadKey();

Çıktısı:

 

Sort:

Verileri alfabetik(string için) veya sayı sırasına(int için) göre sıralar.

string[] diller = { "C#", "C", "C++", "Lua", "Java", "Delphi", "Visual Basic" };
Console.WriteLine("---- Önce ----");
for (int i = 0; i <= 6; i++)
{
     Console.WriteLine("diller[" + i + "] = " + diller[i]);
}
Array.Sort(diller);
Console.WriteLine("---- Sonra ----");
for (int m = 0; m <= 6; m++)
{
     Console.WriteLine("diller[" + m + "] = " + diller[m]);
}
Console.ReadKey();

Çıktısı:



IndexOf:

Bir veriyi dizide aramayı sağlar. 

string[] diller = { "C#", "C", "C++", "Lua", "Java", "Delphi", "Visual Basic" };

Console.Write("Aranacak veriyi giriniz: ");
string veri = Console.ReadLine();
if (veri.Trim() != "")
{
    int index = Array.IndexOf(diller, veri.Trim());
    if (index != -1)
    {
        Console.WriteLine("Veri " + index + " index'indedir.");
    }
    else
    {
        Console.WriteLine("Veri bulunamadı.");
    }
}
Console.ReadKey();

Yukarıdaki örnekte, kullanıcıdan aranacak veri isteniyor. Veri girildiğinde dizide aranıyor. Bulduğunda verinin index'ini veriyor. Bulamazsa Veri bulanamadı mesajı çıkartıyor.

Çıktısı:

 

Dinamik Diziler

Önceki anlatımlarda gördüğümüz klasik dizilerde önceden kapasiteyi belirliyorduk ve kapasiteyi fazla belirlediğimizde fazla yer kaplıyordu.

Şimdi inceleyeceğimiz dinamik dizilerde kapasite tanımlamamıza gerek kalmayacak ve aynı zamanda da fazla yer kaplamayacaktır.

Tanımlamasını öğrenmeden önce kütüphane eklememiz gerekmektedir.

System.Collections kütüphanesini eklemek için:

using System.Collections

using anahtar sözcüğü ile ekleyebiliriz.

ArrayList diziadi = new ArrayList();

Dizi tanımlamasının yapısı yukarıdaki gibidir.

En çok kullanılan metot ve özellikler:

Özellikler:

  • Capacity
  • Count

Metotlar:

  • Add
  • Insert
  • Remove
  • RemoveAt
  • Sort

 

Capacity:

Dizinin, kapasitesini int türünde verir.

int kapasite = dizi.Capacity;

Count:

Dizinin, eleman sayısını int türünde verir.

int eleman = dizi.Count;

Add:

Diziye çeşitli veri türünde(int, string, bool vs.) eleman eklemeyi sağlayan metottur.

ArrayList dizi = new ArrayList();
dizi.Add("Sanal Dosya");
dizi.Add(10);
dizi.Add(true);
dizi.Add(10.11d);
dizi.Add(10.121f);
dizi.Add('H');

Yukarıdaki gibi, diziye çeşitli türlerde veriler ekleyebiliriz.

Insert:

Diziye çeşitli veri türünde (int, string, bool vs.), istediğimiz yere veri eklemeyi sağlar.

 

ArrayList dizi = new ArrayList();
dizi.Add("Sanal Dosya");
dizi.Add(10);
dizi.Add(true);
dizi.Add(10.11d);
dizi.Add(10.121f);
dizi.Add('H');

dizi.Insert(2, "Ready");

Yukarıdaki dizinin içeriği aşağıdaki gibidir:

 

dizi[0] --> Sanal Dosya
dizi[1] --> 10
dizi[2] --> Ready
dizi[3] --> true
dizi[4] --> 10.11
dizi[5] --> 10.121
dizi[6] --> H 

 

Remove:

Belirlediğiniz veriyi diziden silmeyi sağlar.

ArrayList dizi = new ArrayList();
dizi.Add("Sanal Dosya");
dizi.Add(10);
dizi.Add(true);
dizi.Add(10.11d);
dizi.Add(10.121f);
dizi.Add('H');

dizi.Remove("Sanal Dosya");
dizi.Remove(10.11d);

 

Yukarıdaki dizinin içeriği aşağıdaki gibidir:

dizi[0] --> 10

dizi[1] --> true

dizi[2] --> 10,121

dizi[3] --> H

 

RemoveAt:

Belirlediğiniz indeksteki veriyi silmeyi sağlar.

ArrayList dizi = new ArrayList();
dizi.Add("Sanal Dosya");
dizi.Add(10);
dizi.Add(true);
dizi.Add(10.11d);
dizi.Add(10.121f);
dizi.Add('H');

dizi.RemoveAt(0);
dizi.RemoveAt(4);

Not: Veri sildirdikten sonra verilerin yeni indeks dizilimine dikkat edin!

Örneğin:

"dizi.RemoveAt(0)" komutu çalıştıktan sonra dizinin içeriği aşağıdaki gibidir:

dizi[0] --> 10

dizi[1] --> true

dizi[2] --> 10,11

dizi[3] --> 10,121

dizi[4] --> H

 

"dizi.RemoveAt(4)" komutu çalıştıktan sonra dizinin içeriği aşağıdaki gibidir:

dizi[0] --> 10

dizi[1] --> true

dizi[2] --> 10,11

dizi[3] --> 10,121

 

Sort:

Verileri alfabetik(string ise), sayılara göre(int ise) sıralar.

ArrayList dizi = new ArrayList();
dizi.Add('D');
dizi.Add('B');
dizi.Add('A');
dizi.Add('E');
dizi.Add('C');

dizi.Sort();

foreach (char veri in dizi)
{
    Console.WriteLine(veri);
}
Console.ReadKey();

 Çıktısı

A

B

C

D

E