Bu yazımda, C#’da dizi tanımlamaları ve System.Array sınıfları ile alakalı örnekler sunuyor olacağım. Örnekleri aşağıdaki kod bloğunda görebilirsiniz.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Array { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { /* * Tüm programlama dillerinde olduğu gibi C# programlama dilinde de dizi (array) yapısı kullanılmaktadır. * Hafızada arka arkaya saklanan aynı türden nesnelere dizi (array) denmektedir. * Dizi içindeki tüm elemanlara aynı ortak isimden ulaşılmaktadır. Burada önemli olan elemanın hafızadaki yeridir. * C# ile programlamada dizi değişken tanımlama 2 aşamada yapılmaktadır. * Öncelikle diziyi oluşturacak elemanların türü tanımlanır. Dizinin elemanlarına [] (index operatörü) ile ulaşılır. */ string [] dersler; /* * Bu şekilde ders adında string tipte değişken dizisi tanımlayacağımızı belirtmiş oluruz. * Bu aşamada kaç elemanlı bir dizi olacağı belli değildir. * Sonrasında dizi değişkenin kaç elemanlı olacağı new deyimi ile belirtilir. */ dersler = new string[5]; /* * Bunun sonucunda hafızada aşağıdaki şekilde yer ayrılacaktır. * Burada dikkat edilirse dizi beş elemanlıdır, ancak dizinin ilk elemanına ait index numarası “0” dır. */ // Bu 2 aşamada yaptığımız işlemi, aşağıdaki şekilde tek satırda da yazabiliriz. // string[] arabalar = new string[5]; // Dizinin değişkenlere bilgi aktarmak yada dizinin herhangi bir elemanını başka bir değişkene atamak için [ ] kullanılır. dersler[0] = "Matematik"; dersler[1] = "Türkçe"; dersler[2] = "İngilizce"; dersler[3] = "Sosyal"; dersler[4] = "Fen"; string secilen_ders = dersler[3]; //Ciktisi Sosyal olacaktir ve bu degeri secilen_ders string degiskenine atamis olduk. MessageBox.Show(dersler[3]); // Ciktisi Sosyal olacaktir. //Dizilere değer aktarma işlemi aşağıdaki örneklerde olduğu gibi de yapılabilir. int[] kayit = { 10, 12, 14, 16 }; // Burada dizinin boyutu 4 olarak belirlenir. } private void button2_Click(object sender, EventArgs e) { int[] numara = new int[10]; //10 elemanli bir int dizisi olusturduk. for (int i = 0; i < 10; i++) //i 10 olana kadar asagidaki blogun icinde don { numara[i] = i * 10; //ve numara isimli diziye i*10 ' u ata // dizinin elemanları 0,10,20,30,40,50,60,70,80 ve 90 olacaktır. } for (int k = 0; k < 10; k++) { listBox1.Items.Add(numara[k]);//Listenin index'i kullanilarak elamanlar listbox1'e yazdirildi. //Aslinda asagidaki gibi oluyor. /* * listBox1.Items.Add(numara[0]); * listBox1.Items.Add(numara[1]); * listBox1.Items.Add(numara[2]); * listBox1.Items.Add(numara[3]); * listBox1.Items.Add(numara[4]); * listBox1.Items.Add(numara[5]); * listBox1.Items.Add(numara[6]); * listBox1.Items.Add(numara[7]); * listBox1.Items.Add(numara[7]); * listBox1.Items.Add(numara[9]); * listBox1.Items.Add(numara[10]); * Bu elamanlari tek tek yukaridaki sekilde de listBox1'e ekleyebilirdik fakat * for dongusu kullanilarak bu islemi cok kisa bir sekilde halletmis olduk. */ } } private void button3_Click(object sender, EventArgs e) { /* * SetValue() Metodu ile Dizi Değişkenlere Değer Atama * Dizi değişkenlere değer atamanın bir başka yöntemi de Array sınıfına ait SetValue() metodudur. * SetValue() metodu, atanacak değerleri ve kaçıncı indekste (sırada) olacağına ait iki parametreye sahiptir. */ // 2 elamanli soyad isimli string bir dizi tanimladik string[] soyad = new string[2]; // soyad dizisinin 0. index'sine "Kurt" soyadini atadik. Tirnaklar olmaz ise hata verir. soyad.SetValue("Kurt", 0); // aoyad dizisinin 1. index'sine ise "Ozkanca" soyadini SetValue() metodu ile atamis olduk. soyad.SetValue("Ozkanca", 1); //Az once for dongsusu ile degerleri listBox'a eklemistik. Simdi elaman sayisi az oldugundan //Tek tek ekleyecegim. listBox2.Items.Add(soyad[0]); //Kurt soyadini listBox2.Items.Add(soyad[1]); //Ozkanca soyadini ekleyecek. } private void button4_Click(object sender, EventArgs e) { //int tipinde ve ders_kodu adinda 5 elemanli bir dizi olusturuyoruz. int [] ders_kodu = new int[5]; //tanimladigimiz ders_kodu dizisinin ilk elamanina 10 atiyoruz. ders_kodu[0] = 10; //int olarak atadigimizdan ders_kodu dizesindeki ilk elemani gosterirken stringe ceviriyoruz. textBox1.Text = ders_kodu[0].ToString(); //ve textbox1'de cikti 10 olarak gozukuyor. //Daha onceden tanimlamis oldugumuz 5 elamanli ders_kodu dizisinin //Elaman sayisini degistiriyoruz. //Elaman sayisini degistirdigimiz anca daha onceden icinde bulunan elaman ya da //Elamanlar silinecektir. ders_kodu = new int[8]; //dizinin elaman sayisini 5'ten 8'e yukselttigimiz icin 10 degeri silindi //bu yuzden dolayi textbox2'de 0 degerini gorecegiz. textBox2.Text = ders_kodu[0].ToString(); } private void button5_Click(object sender, EventArgs e) { /* * Dizi değişkenlerinin eleman sayısını değiştirmek için diğer bir yöntem ise Array sınıfının Resize() metodundan yararlanmaktır. * Resize() metodu, dizi değişkeninin referansını ve yeni eleman sayısını parametre olarak alır. * Bu yöntemde dizinin eleman sayısını değiştirdiğimizde, elemanların önceki içerikleri korunur. */ listBox3.Items.Clear(); string[] bolum = new string[2]; bolum[0] = "Bilgisayar Programlama"; bolum[1] = "Mekatronik"; //bolum adinda 2 elamanli dizimizi olusturuk ve bunun icine 2 tane eleman kayit ettik. //normalde dizinin boyutunu yukaridaki gibi 3'e cikarsaydik daha onceden eklemis oldugumuz //Bilgisayar Programlama ve Mekatronik degerlerimiz silinecekti. Bunun onune gecmek icin System.Array.Resize(ref bolum, 3); bolum[2] = "Makina"; //dizinin boyutunu 3'e cikardik ve "Makina" adinda bir eleman daha eklemis olduk. for (int i = 0; i < 3; i++) { listBox3.Items.Add(bolum[i]); } } private void button6_Click(object sender, EventArgs e) { /* * Uygulamalarda çok sık olarak bir tabloda değişkenlerin saklanması ve tablodaki değerlerin üzerinde işlem yapılması istenmektedir. * Çoğunlukla 2 boyutlu (bazen de 3 boyutlu) dizi değişkenleri kullanılmaktadır. */ string[,] ogrenci = new string[3, 2]; ogrenci[0, 0] = "Serdar Kurt"; ogrenci[0, 1] = "1234"; ogrenci[1, 0] = "Zeynep Koc"; ogrenci[1, 1] = "1265"; ogrenci[2, 0] = "Osman Bilir"; ogrenci[2, 1] = "1776"; textBox3.Text = ogrenci.Rank.ToString(); //Dizinin kac boyutlu oldugunu gosterir Cevap:2 textBox4.Text = ogrenci.Length.ToString(); //Dizideki toplam eleman sayisini gosterir. Cevap:6 //veya asagidaki sekilde de cok boyutlu dizi tanimlayabiliriz: string[,] ogrenciler = { {"Serdar Kurt","1234" },{ "Zeynep Koc","1265"},{"Osman Bilir","1776" } }; } private void button7_Click(object sender, EventArgs e) { //CopyTo() ile bir dizinin tamami baska bir dizinin istenilen yerine //kopyalanabilir. string[] sayfa1 = { "a", "b", "c", "d" }; string[] sayfa2 = new string[10]; sayfa1.CopyTo(sayfa2, 3); textBox5.Text = sayfa2[3].ToString(); //textBox5'e a yazar. } private void button8_Click(object sender, EventArgs e) { //Diğer bir kopyalama metodu ise Copy metodudur. string[] sayfa1 = { "a", "b", "c", "d" }; string[] sayfa2 = new string[10]; System.Array.Copy(sayfa1, 2, sayfa2, 3, 2); textBox6.Text = sayfa2[3].ToString(); //textBox6'nin icine c yazar. /* * Burada sayfa1’in 2. elemanından sonraki 2 elemanı, sayfa2’nin 3. elemanından itibaren kopyalanır. */ } private void button9_Click(object sender, EventArgs e) { /* * Sort() metodu ile dizileri küçükten büyüğe sıralayabilirsiniz. */ //Asagida sayfa1 adli string dizimizi tanimladik. string[] sayfa1 = { "x", "a", "k", "d" }; /* * Array.Sort() komutu ile dizi elemanlari * "a","d","k","x" olarak buyukten kucuge dogru * siralanacak. */ System.Array.Sort(sayfa1); for (int i = 0; i < 4; i++) { listBox4.Items.Add(sayfa1[i]); /* ListBox4' un içinde sırasıyla “a”, “d”, “k”, “x” * değerleri gözükecektir. */ } } private void button10_Click(object sender, EventArgs e) { /* * Diziyi ters çevirmek için Array sınıfının Reverse() metodu kullanılır. */ string[] gunler = { "Pazartesi", "Sali", "Carsamba", "Persembe", "Cuma", "Cumartesi", "Pazar" }; System.Array.Reverse(gunler); /* * Burada GetLength(0) metodu, dizinin boyutunu vermektedir. * Parantez içindeki 0 değeri ise, örnekteki dizi 1 boyutlu olduğundan * birinci boyutu ifade etmek için kullanılmıştır. */ for (int i = 0; i < gunler.GetLength(0); i++) { listBox5.Items.Add(gunler[i]); } } private void button11_Click(object sender, EventArgs e) { /* * Dizilerde arama yapmak için genellikle 2 yöntem kullanılır. * Bunlardan birincisi BinarySearch() metodudur. * Bu yöntem, ancak sıralanmış dizilerde kullanılabilir. * Arama yapacağımız dizi sıralı bir dizi değilse, * önce dizinin Sort() metodu ile sıralanması gerekir. * BinarySearch() metodu genellikle, dizi ve aranacak bilgi olmak üzere iki parametre alır. */ //Dizimizi olusturuyoruz. string[] gunler = { "Pazar", "Sali", "Pazartesi", "Persembe", "Carsamba", "Cumartesi", "Cuma" }; //Dizi once siralaniyor. System.Array.Sort(gunler); //textBox7 icindeki deger aranacak int arama = System.Array.BinarySearch(gunler, textBox7.Text); if (arama<=-1)//Yani girilen deger dizide bulunamadiysa asagidaki suslu parantez calissin { MessageBox.Show("Aradiginiz deger bulunamadi"); } //Eger bulunduysa else bloguna gir else { //Ve sonucu goster. MessageBox.Show(gunler[arama]); } } private void button12_Click(object sender, EventArgs e) { /* * Dizilerde arama yapmak için diğer bir yöntem ise IndexOf() metodunu kullanmaktır. * Bu yöntemde dizinin sıralı olmasına gerek yoktur. */ //Dizimizi olusturuyoruz. string[] gunler = { "Pazar", "Sali", "Pazartesi", "Persembe", "Carsamba", "Cumartesi", "Cuma" }; //textBox8 icindeki deger aranacak int arama = System.Array.IndexOf(gunler, textBox8.Text); if (arama <= -1)//Yani girilen deger dizide bulunamadiysa asagidaki suslu parantez calissin { MessageBox.Show("Aradiginiz deger bulunamadi"); } //Eger bulunduysa else bloguna gir else { //Ve sonucu goster. MessageBox.Show(gunler[arama]); } } } }
Proje Dosyasi: