C# Diziler



Aynı tipteki bir veri gurubunun bir değisken içinde saklanmasıdır.
-Veriler Hafızada 0 dan baslayarak sıra ile bulunur.
-C# dilinde dilinde diziler system.Array tipindedir.
-Bir örnek olarak, haftanın günleri bir boyutlu dizi olarak düsünülebilir. İlkeleman (0. Eleman),
-Pazartesi, son eleman da (6. Eleman) Pazar günü olacaktır.
-Diğer bir örnek, bir ayda bulunan günler, iki boyutlu bir dizi olarak düsünülebilir. Yatayda haftanın günleri bulunurken, düseyde hafta sayısı olabilir.
-Bir yıldaki günleri de üç boyutlu bir dizi olarak  düsünülebilir. 1. boyut Haftanın günleri, 2. boyut hafta numarası. Üçüncü boyut da aylar olur.
-C# da tek boyutlu bir dizi, normal bir değisken gibi tanımlanır , sadece değisken ifadesinden sonra köseli parantez kullanılır.

Örnek 1:
private void Form1_Load(Object sender, EventArgs e)
{
string[] gunler = new string[7];
gunler[0] = "Pazartesi";
gunler[1] = "Salı";
gunler[2] = "Çarsamba";
gunler[3] = "Persembe";
gunler[4] = "Cuma";
gunler[5] = "Cumartesi";
gunler[6] = "Pazar";
Messagebox.Show(gunler[0]);
}
Diziler
Örnek 2 :
Veriler dizilere yerlestirilirken 0 dan itibaren baslanarak yerlestirilir ve diziden veriler alınırken 0 dan baslanır. Değisken adının önündeki küme parantezinin içindeki sayılar değiskenin index numarasını verir.
private void Form1_Load(Object sender, EventArgs e)
{
string[] gunler = {"Pazartesi","Salı","Çarsamba","Persembe","Cuma","Cumartesi","Pazar"};
Messagebox.Show(gunler[0]);
}
Diziler
Dizi değisken tanımlama sekilleri

string[] gunler = {"Pazartesi","Salı","Çarsama","Persembe","Cuma","C.tesi","Pazar"};


string[] gunler = new string[7];
gunler[0] = "Pazartesi";
gunler[1] = "Salı";
gunler[2] = "Çarsamba";
gunler[3] = "Persembe";
gunler[4] = "Cuma";
gunler[5] = "Cumartesi";
gunler[6] = "Pazar";
Örnek 3 :

 private void btnGoster_Click(object sender, EventArgs e)
{ string[] gunler = new string[7];
gunler[0] = "Pazartesi";
gunler[1] = "Salı";
gunler[2] = "Çarsamba";
 gunler[3] = "Persembe";
gunler[4] = "Cuma";
gunler[5] = "Cumartesi";
gunler[6] = "Pazar";            
for (int i = 0; i < gunler.Length; i++)
{              
 lsbGunler.Items.Add(gunler[i]);
}        
}
Diziler
For DÖNGÜSÜ YERİNE Foreach KULLAN  
 private void btnGoster_Click(object sender, EventArgs e)
{ string[] gunler = new string[7];
 gunler[0] = "Pazartesi";
gunler[1] = "Salı";
gunler[2] = "Çarsamba";
gunler[3] = "Persembe";
gunler[4] = "Cuma";
gunler[5] = "Cumartesi";
gunler[6] = "Pazar";
foreach (string i in gunler)     
  {        
lsbGunler.Items.Add(i);     
 }        
 }  

Örnek 4 :

&nbsp;private void Form1_Load(object sender, EventArgs e)
{
double[] sayilar = { 0.15, 0.17, 0.1, 0.3, 0.22, 0.45, 0.54, 0.68, 0.72, 1.1, 3.1};
int eleman = sayilar.Length;
MessageBox.Show("Sayılar dizinde toplam" + eleman.ToString() + " adet eleman vardır");
foreach (double i in sayilar)
{
lsbGunler.Items.Add(i);
}
}
Örnek 5 :
-1 ile 500 arasında rastgele 100 adet tamsayı üretip bir diziye dolduran bir program yazınız.
-Dizideki bu sayıların en büyük ve en küçük değerlerini bularak ekrana yazdırın. Ayrıca, ortalama değerini de hesaplayarak ekranda gösterin.
private void btnGoster_Click(object sender, EventArgs e)
{
int max, min, ortalama,toplam;
Random rastgelesayi = new Random();
int[] dizi = new int[100];
for (int i = 0; i < 100; i++)
{
dizi[i] = rastgelesayi.Next(500);
}
max = dizi[0];
min = dizi[0];
toplam = 0;
ortalama = 0;
for (int i = 0; i < 100; i++)
{
if (max < dizi[i])
{
max = dizi[i];
}
if (min > dizi[i])
{
min = dizi[i];
}
toplam += dizi[i];
}
lblmax.Text = "Maksimum Sayı: " + max.ToString();
lblMin.Text = "Minimum Sayı: " + min.ToString();
ortalama = toplam / 100;
lblOrtalama.Text = "100 adet Sayının ortalaması: " + ortalama.ToString();
}
Bir önceki örnekte üretilen 100 adet random sayıyı, büyükten küçüğe yada küçükten büyüğe doğru sıralatın ve listbox a ekletin…

Asağıdaki kodları, bir önceki örneğin devamına ekleyelim…
int yedek;
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 100; j++)
{
if (dizi[i] > dizi[j])
{
yedek = dizi[j];
dizi[j] = dizi[i];
dizi[i] = yedek;
}
}
}
lsbSayilar.Items.Clear();
for (int i = 0; i < 100; i++)
{
lsbSayilar.Items.Add(dizi[i]);
}
.Length Dizideki Eleman sayısı

Belirtilen dizinin eleman sayısını integer (int) olarak verir.
private void Form1_Load(object sender, EventArgs e)
{
Random rastgelesayi = new Random();
int[] dizi = new int[50];
for (int i = 0; i < dizi.Length; i++)
{
dizi[i] = rastgelesayi.Next(100);
}
}
.Clear Diziyi Temizleme

Parametre olarak verilen dizinin, belirtilen indis aralığındaki tüm değerleri temizler.Temizleme isleminde atanan değer, dizi elemanlarının tiplerine göre değisir. Örneğin int tipinde tanımlı bir dizinin elemanları temizlenirse 0 değerini alacaktır. Buna karsın String tipindeki elemanlar “” (bos yazı) değerini alır.
Örnek;
int[] dizi = new int[50];
private void Form1_Load(object sender, EventArgs e)
{
Random rastgelesayi = new Random();
int elemansayisi = dizi.Length;
int dizininboyutu = dizi.Rank;
MessageBox.Show("Dizinin Eleman sayisi: " + elemansayisi.ToString());
MessageBox.Show("Dizinin Boyutu: " + dizininboyutu.ToString());
for (int i = 0; i < dizi.Length; i++)
{
dizi[i] = rastgelesayi.Next(500);
}
// Burada Dizi doldu
}
private void btnDiziyiBosalt_Click(object sender, EventArgs e)
{
Array.Clear(dizi, 0, dizi.Length); // Dizi Burada Bosaltıldı Durma noktası ekle ve Dizinin içine Bak
}
.Çok Boyutlu Diziler
Birden fazla boyutu olan dizilere çok boyutlu diziler denir. İki tip çok boyutlu dizi vardır.
Matris diziler
Düzensiz diziler (Jagged)
Matris Diziler

Adından da anlasılacağı gibi matris yapıda dizilerdir. Matris diziler 2 veya daha fazla boyutlu olabilirler. Örneğin 3x2 boyutlu bir matris dizisi asağıdaki gibi tanımlanır.
int [,] mdizi ={{1,2},{3,4},{5,6}};
mdizi[0,0] = 1;
mdizi[0,1] = 2;
mdizi[1,0] = 3;
mdizi[1,1] = 4;
mdizi[2,0] = 5;
mdizi[2,1] = 6;
3 veya daha çok boyutlu diziler teoride dilin yapısına uygun olmasına rağmen gerçek hayatta çok fazla kullanılmazlar. 3 ve daha fazla boyutlu dizilerde islem yapması daha zordur. Mesela 3 boyutlu bir dizi için iç içe 3 tane for döngüsü kullanmak gerekmektedir. Asağıda 3 boyutlu bir matris dizi tanımlaması örnek olarak verilmistir.
int [ , , ] mdizi ={{{1,2},{3,4},{5,6}}, {{1,2},{3,4},{5,6}}};
mdizi[0,0,0] = 1;
mdizi[0,0,1] = 2;
mdizi[0,1,0] = 3;
mdizi[0,1,1] = 4;
mdizi[0,2,0] = 5;
mdizi[0,2,1] = 6;
mdizi[1,0,0] = 1;
mdizi[1,0,1] = 2;
mdizi[1,1,0] = 3;
mdizi[1,1,1] = 4;
mdizi[1,2,0] = 5;
mdizi[1,2,1] = 6;
Düzensiz (Jagged) Diziler
Bir dizinin her bir elemanı ayrı bir dizi ise bir dizi içeriyorsa o zaman bu dizilere düzensiz diziler denir. Her bir satırdaki dizi farklı boyut olabileceği için matris dizisi formunda olması gerekmez. Bu sebeple bu dizilere düzensiz (jagged) yada çentikli dizi adı verilir.
int[][] dizi = new int[3][];
dizi[0] = new int[5];
dizi[1] = new int[4];
dizi[2] = new int[3];
Örnek.
string [] [] dizi = new string [3] [];
dizi[0] = new string [2];
dizi[1] = new string [3];
dizi[2] = new string [1];
dizi[1] [2] = “çentikli";
Buradan da anlasılacağı gibi düzensiz dizilerin matris dizilerden farkı, sütun sayısının sabit olmamasıdır. Diziler konusunu bir defada anlamak elbette zordur. Özellikle düzensiz dizileri anlamak için çok fazla örnek yapmak gerekir.
Örnek.
private void Form1_Load(object sender, EventArgs e)
{
int[][] dizi = new int[3][];
dizi[0] = new int[5];
dizi[1] = new int[3];
dizi[2] = new int[2];
for (int i = 0; i < dizi.Length; i++)
{
for (int j = 0; j < dizi[i].Length; j++)
{
dizi[i][j] = 1*( i + j);
}
}
foreach (int[] sayi in dizi)
{
foreach (int deger in sayi)
{
lblSonuc.Text += deger.ToString()+ " ";
}
}
}
Dizi İşlemleri
Dizi işlemleri, programlarda çok sık kullanılan programlama öğelerindendir.
-IndexOf()
-LastIndexOf()
-Sort()
-Reverse()
Array sınıfı yardımıyla kullanılırlar.
IndexOf() - LastIndexOf()
IndexOf() : Aramayı bastan baslatır ve aranan elemanın kaçıncı sırada olduğunu değer olarak döndürür.
LastIndexOf() : Aramayı sondan baslatarak aranan elemanın bastan kaçıncı sırada
olduğunu değer olarak döndürür.
Eğer aranan eleman bulunamazsa -1 değeri döndürülür.
ÖRNEK
private void Form1_Load(object sender, EventArgs e)
{
int[] dizi = { 1, 3, 5, 7, 9, 11, 1, 3, 5, 7, 9,11 };
MessageBox.Show(Array.IndexOf(dizi,1).ToString());
}
Sonuç : 0 dır. Arama sol baştan itibaren başlamıştır. Yer numarası ise baştan 0. sıradadır.
private void Form1_Load(object sender, EventArgs e)
{
int[] dizi = { 1, 3, 5, 7, 9, 11, 1, 3, 5, 7, 9,11 };
MessageBox.Show(Array.LastIndexOf(dizi,1).ToString());
}
Sonuç : 6 dır. Arama sağdan sola yani sondan basa doğrudur. Ancak yer bildirimini bastan bastan itibaren baslamıstır yeri ise 0 dan itibaren 6. sıradadır.
Array.Sort()
Dizinin elemanlarını  küçükten büyüğe doğru sıralar.
private void Form1_Load(object sender, EventArgs e)
{
int[] dizi = { 1, 3, 5, 7, 9, 11, 1, 3, 5, 7, 9,11 };
for (int i = 0; i < dizi.Length; i++)
{
lblSonuc1.Text += dizi[i].ToString() + " - ";
}
Array.Sort(dizi); // lblSonuc2 de dizinin sıralandığını görüyoruz
for (int i = 0; i < dizi.Length; i++)
{
lblSonuc2.Text += dizi[i].ToString() + " - ";
}
}
ArrayList
-Klasik dizilerle çalısırken karsılasabileceğimiz temel sorunlar sunlardır.
-Dizilerin sınırları sabittir. int[] dizi = new int[60];
- Dizilerin tüm elemanları aynı türden olmalıdır. Örn. Hepsi int
-Kullanmadığımız dizi elemanlarından dolayı bellek alanları gereksiz yere isgal edilmektedir.
-Örneğin sayısını bilemediğimiz bir dizinin eleman sayısını 500 olarak belirlediğimizi varsayalım. Çalısma zamanında dizimizin sadece 10 elamanını kullandığımız durumda diğer 490 elemanlık bellek alanı bos olarak kalır. Öte yandan dizimizde tutmak istediğimiz değiskenlerin sayısı 501 bir olduğu bir durumda "IndexOutOfRangeException" istisnai durumu ortaya çıkar ve program bu hatadan dolayı sonlanır.
-ArrayList sınırları dinamik olarak değisebilen diziler olarak tanımlanır.
-Bu veri yapısı .NET sınıf kütüphanesinin System.Collections isim alanında bulunur.
ÖRNEK

private void Form1_Load(object sender, EventArgs e)
{
ArrayList DiziListesi = new ArrayList();
// DiziListesi isimli ArrayList nesnesi olusturuyoruz.
// DiziListesi nesnemize sırası ile 5, 8, 1, 17 ve 20 değerlerini
DiziListesi.Add(5);// Add metodu ile ekleyelim.
DiziListesi.Add(8);
DiziListesi.Add(1);
DiziListesi.Add(17);
DiziListesi.Add(20);
foreach (object eleman in DiziListesi) // DiziListesi'in Sonuç 1'e yazdıryoruz:
{ lblSonuc1.Text += eleman.ToString() + " - "; }
DiziListesi.Remove(8);// DiziListesi dizimizden 8 ve 20 değerlerini çıkartalım:
DiziListesi.Remove(20);
DiziListesi.Add(66); // DiziListesi dizimize 66 ve 4 değerlerini ekliyoruz:
DiziListesi.Add(4);
foreach (object eleman in DiziListesi) // DiziListesi'in Sonuç 2'ye yazdıryoruz:
{ lblSonuc2.Text += eleman.ToString() + " - "; }
}
ArrayList Metodları ve Özellikleri
 Add() Bir nesneyi ArrayList'in sonuna ekler.
 BinarySearch()Sıralanmıs bir ArrayList içinde bir nesneyi Binary search algoritması kullanarak arar.
 Clear() ArrayList'in tüm elemanlarını siler. Sıfırlar.
 Contains() Herhangi bir nesnenin ArrayList'in elemanı olup olmadığını kontrol eder.
 Insert()Dizinin sonuna değilde istediğimiz bir yerine indeksini belirterek eklememizi sağlar.
 Remove() Herhangi bir elemanı diziden siler.
 Reverse() Diziyi ters çevirir.
 Sort() Diziyi sıralar.
Diğer metodlar için lütfen asağıdaki linki kullanın;

Örnek
Personel adlarını tutacak bir ArrayList  tanımlayınız.
Form a bir textbox ekleyerek adları girin. Girilen bu adlar bir ArrayList’te tutulmalı.
Listeyi ve Eleman sayısını Label a yazdırın
Listeden adı textbox a girilen isimi silin.
Listeyi harf sırasına göre sıralatın.
Listeyi harf sırasına göre tersten sıralatın. 
Form Ekranı

C# Diziler için “0 yorum” bulunmaktadır.