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:

