Ana içeriğe atla

( C#) Ders 4 - Diziler, Çok Boyutlu Diziler, Düzenli ve Düzensiz Çok Boyutlu Diziler Nasil Kullanilir. foreach Döngüsünün Kullanimi.

C# da Diziler

Diziler için ayni tipteki verilerin tutuldugu bir koleksiyon diyebiliriz. Örnegin integer verinin bir yigin seklinde tutulmasi için dizileri kullaniriz. C# da diziler referans tipinde degiskenlerdendir. C# da tanimlanan tüm diziler System.Array sinifindan türemis bir nesnedir. C# da diziler asagidaki gibi tanimlanir.
?
1
<veri tipi>[] <degisken ismi> = new <veri tipi>[<dizinin boyutu>];
10 adet integer veri tutan bir dizinin tanim ise
?
1
int[] integerDizi = new int[10];
Bir dizinin boyutlari sabittir ve kullanilmadan önce belirlenmelidir. Dizi boyutunu belirlemek için baska bir degiskende kullanabilirsiniz.
?
1
2
int boyut = 10;
int[] integerDizi = new int[boyut];
Diziyi tanimlama ve baslangiç degerlerini atama islemini ayri satirlardada yapabilirsiniz.
?
1
2
int[] integerDizi;
integerDizi = new int[10];
Ayrica dizileri tanimlarken, dizi içine atmak istediginiz verileride belirterek dizi tanimlayabilirsiniz. Bunun için kullanacaginiz veri tipine uygun olacak sekilde, süslü parantez içinde her biri virgülle ayrilmis dizi elemanlarini yazmaniz yeterli.
?
1
int[] integerDizi = {1,2,3,4,5,6,7,8,9};
Yukarida 10 adet elemani olan ve degerleri de verilmis, integer tipinde verileri tutan bir dizi tanimladik. Eger dizimiz string degerler tutacak olsaydi, süslü parantez içine yazdigimiz elemanlarin her birini çift tirnaklar arasina almamiz gerekirdi.
?
1
string[] strDizi = { "Sabri", "Metin", "Osman", "Ali" };

Dizi Elemanlarina Ulasmak

Dizi elemanlarina ulasmak için [indeks] indeks operatörünü kullaniriz. Dikkat edilmesi gereken nokta C# da dizilerin elemanlari 0. Indeksten baslar, yani eger 5 elemanli bir dizimiz varsa bu dizinin birinci elemani 0. indekste son elemani ise 4. indekstedir. 5 elemanli bir dizinin 3. elemanina asagidaki gibi erisiriz.
?
1
2
int[] integerDizi = { 1, 2, 3, 4, 5};
int ucuncuEleman = integerDizi[2];

Bir dizi içindeki elemanlara ulasmak için basit bir örnek:

?
1
2
3
4
5
int[] integerDizi = { 4, 8, 23, 64, 35 };
for (int i = 0; i < 5; i++)
{
    Console.WriteLine("Dizinin {0}. Elemaninin Degeri = {1} ", i, integerDizi[i]);
}
Yukaridaki kodun çalismasi sonucu olusan ekran görüntüsü:
Dizinin 0. Elemaninin Degeri = 4
Dizinin 1. Elemaninin Degeri = 8
Dizinin 2. Elemaninin Degeri = 23
Dizinin 3. Elemaninin Degeri = 64
Dizinin 4. Elemaninin Degeri = 35
Yukaridaki örnekte bir dizi olusturduk ve bu dizinin eleman sayisi kadar bir for döngüsü kurduk. Döngü içinde diziye ait elemanlarin degerlerine tek tek ulastik.
Peki kullandigimiz dizinin eleman sayisini bilmeseydik nasil döngüye girebilirdik. Bütün diziler System.Array sinifindan türemis nesnelerdir demistik. System.Array sinifinin Length diye bir özelligi vardir, dogal olarakda tüm dizilerinde bir Length özelligi olur. Dizimizin eleman sayisini dizininAdi.Length diyerek alabiliriz. Yukaridaki örnegi bu yöntemle yeniden yazacak olursak.
?
1
2
3
4
5
int[] integerDizi = { 4, 8, 23, 64, 35 };
for (int i = 0; i < integerDizi.Length; i++)
{
    Console.WriteLine("Dizinin {0}. Elemaninin Degeri = {1} ", i, integerDizi[i]);
}
Yukaridaki kodu çalistirdiginizda bir önceki örnegimizle ayni sonucu üretir.
Dizilerle ilgili dersimize devam etmeden önce diziler için kullandigimiz foreach döngüsüne bakalim.

foreach Döngüsü

Diziler ve koleksiyonlarin elemanlarina erismek için basit ve kullanisli bir döngü çesidi. Döngüler dersinde bahsetmedik çünkü dizileri anlatmadan foreach döngüsünü anlamaya çalismak bosuna olacakti. foreach döngüsünün yapisi asagidaki gibidir.
?
1
2
3
4
foreach(<dizi içindeki elemalarin veri tipi> <degisken ismi> in <diziveyaKoleksiyonadi>)
{
    <Kod blogumu>
}
Yukarida for döngüsü ile yaptigimiz örnegimiz foreach döngüsü ile yapalim.
?
1
2
3
4
foreach (int diziElemani in integerDizi)
{
    Console.WriteLine("Elemanin Degeri = {0} ", diziElemani);
}
Çok daha basit ve kullanisli oldugunu görebilirsiniz.
  • Foreach döngüsü kullanirken ulastigimiz dizi elemanlari readonly dir. Yani yukaridaki örnek üzerinde anlatacak olursak foreach döngüsü içinde diziElemani adli integer degiskenin içerdigi degeri degistiremezsiniz. Eger degistirmeye kalkarsaniz Cannot assign to 'diziElemani' because it is a 'foreach iteration variable' hatasi alirsiniz. Eger yazdiginiz uygulamada dizi elemanlarini döngü içinde degistirmek istiyorsaniz for döngüsü kullanmanizi tavsiye ederim.
  • String tipindeki bir degiskende char tipindeki verilerin birlesmesinden olusmus bir dizidir. Öyleyse foreach döngüsü kullanarak asagidaki gibi bir stringin elemanlarini erisebilirsiniz.
?
1
2
3
4
5
string metin = "Yazilim Mutfagi";
foreach (char harf in metin)
{
    Console.WriteLine("Harf = {0} ", harf);
}

Çok Boyutlu Diziler (Multidimensional Array)

Çok boyutlu bir dizi ‘dizinin dizisi’ seklinde tabir edilebilir. Her elemani baska bir dizi olan diziler çok boyutlu bir dizidir. Çok boyutlu bir dizi veritabaninda her satirinda birden fazla kolon bulunan bir tabloya benzetilebilir. Eger her satirda bulunan her kolon kendi içinde baska bir dizi barindirmiyorsa bu tür dizilere 2 boyutlu diger bir degisle çok boyutlu diziler denir. Eger her kolonda kendi içinde baska bir dizi barindiriyorsa bu tür dizilere n boyutlu diziler denir. Burda n ifadesi dizinin derinligini ifade eder.

Çok boyutlu diziler iki çesittir;

  • Düzenli Diziler: Her satiri ayni sayida kolon barindiran diziler.
  • Düzensiz Diziler (Jagged Array) : Her satiri farkli sayida kolon barindiran diziler.
Çok boyutlu dizileri sekillerle anlatmaya çalisalim.,
Not: Dizilerin ilk elemaninin indeks numarasinin 0 oldugunu unutmayin.
tek boyutlu çift boyutlu ve 3 boyutlu diziler

Dizilerin Tanimlanmasi ve Deger Atamalari

Tek boyutlu bir dizinin nasil tanimlandigini ve nasil deger atayacagimizi yukarda anlatmistik. Simdi Tek boyutlu dizi dahil tüm dizi tiplerini nasil tanimlayacagimiza bakalim.

Tek Boyutlu Diziler:

?
1
2
3
4
5
6
7
//Dizinin Olusturulmasi
int[] intDizi = new int[5];
 
//Dizi elemanlarina deger atamasi
intDizi[0] = 36; //dizinin ilk elemanina 36 degeri atandi
intDizi[2] = 26; //dizinin ikinci elemanina 26 degeri atandi
intDizi[4] = 32; //dizinin son elemanina 32 degeri atandi

Çok Boyutlu Diziler:

?
1
2
3
4
5
6
7
8
9
//Dizinin Olusturulmasi
int[,] intCokBDizi = new int[2, 3];
//Dizi elemanlarina deger atamasi
intCokBDizi[0, 0] = 23;
intCokBDizi[0, 1] = 25;
intCokBDizi[0, 2] = 33;
intCokBDizi[1, 0] = 41;
intCokBDizi[1, 1] = 29;
intCokBDizi[1, 2] = 93;

Çok Boyutlu Dizilerin Elemanlarina Döngü Ile Ulasmak

for döngüsü:

?
1
2
3
4
5
6
7
8
//Dizi elemanlarini for döngüsü ile bulmak.
for (int row = 0; row < intCokBDizi.GetLength(0); row++)
{
    for (int col = 0; col < intCokBDizi.GetLength(1); col++)
    {
        Console.WriteLine("Dizinin {0},{1} indeksindeki degeri : {2}",row,col,intCokBDizi[row,col]);
    }
}
Ekran Çiktisi:
Dizinin 0,0 indeksindeki degeri : 23
Dizinin 0,1 indeksindeki degeri : 25
Dizinin 0,2 indeksindeki degeri : 33
Dizinin 1,0 indeksindeki degeri : 41
Dizinin 1,1 indeksindeki degeri : 29
Dizinin 1,2 indeksindeki degeri : 93
GetLength() fonksiyonu dizinin belirtilen boyutundaki eleman sayisini verir. Yukaridaki örnekte görüldügü gibi parametre olarak 0 veya 1 veriyoruz. 0 dizinin birinci boyutundaki eleman sayisi yani satir sayisi, 1 verdigimizde ise dizinin 2.boyutu yani kolon sayisini verir.
Dizilerin Length özelligi dizi içinde bulunan toplam eleman sayisini verir. Örnegin yukaridaki örnekte tanimladigimiz dizi için intCokBDizi.Length sonuç olarak 6 döndürür.
2 boyutlu Düzensiz dizilerde foreach döngüsü kullanamayiz. foreach döngüsünü sadece tüm elemanlara erismek için kullanabiliriz. Eger her boyuttaki elemana farkli erismek istiyorsak for döngüsü kullanmamiz gerekiyor. foreach döngüsü ile düzensiz 2 boyutlu dizilerin elemanlarina erisebiliriz. Önce düzensiz dizilerin nasil tanimlandigina bakalim sonrada foreach döngüsü ile elemanlarina nasil erisecegimize göz atalim.

Düzensiz Çok Boyutlu Diziler:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Dizinin Olusturulmasi
int[][] intCokBDizi = new int[3][];
 
//Ikinci boyutta bulunan her elemanda bir dizi olduguna göre
//onlarida new komutu ile ayarlamamiz gerekir.
intCokBDizi[0] = new int[2];
intCokBDizi[1] = new int[4];
intCokBDizi[2] = new int[3];
 
//Dizi elemanlarina deger atamasi
intCokBDizi[0][0] = 13;
intCokBDizi[0][1] = 15;
 
intCokBDizi[1][0] = 21;
intCokBDizi[1][1] = 29;
intCokBDizi[1][2] = 29;
intCokBDizi[1][3] = 23;
 
intCokBDizi[2][0] = 39;
intCokBDizi[2][1] = 39;
intCokBDizi[2][2] = 33;
Bir önceki anlattigimiz düzensiz çok boyutlu dizide for döngüsü kullanarak elemanlara tek tek ulasmistik. Düzensiz dizilerde elemanlara tek tek ulasmak istedigimizde for döngüsü yerine foreach döngüsü kullaniyoruz.

foreach Döngüsü:

?
1
2
3
4
5
6
7
8
foreach (int[] row in intCokBDizi)
{
    foreach (int col in row)
    {
        Console.WriteLine(col);
    }
    Console.WriteLine("---------");
}
Ekran Çiktisi
13
15
---------
21
29
29
23
---------
39
39
33
---------
Yukarida anlattiklarimizin isiginda 3 boyutlu düzenli ve düzensiz dizileri nasil tanimlariz ve bunlara nasil deger atamasi yapariz bir örnekle anlatalim.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//3 boyutlu düzenli dizi tanimlama
int[,,] intUcBDizi = new int[2,3,2];
 
//3 boyutlu düzenli diziye deger atama
intUcBDizi[0, 0, 0] = 1;
intUcBDizi[0, 0, 1] = 34;
intUcBDizi[1, 1, 0] = 156;
 
//3 boyutlu düzensiz dizi tanimlama
int[][][] intUcBDuzensizDizi = new int[2][][];
 
//3 boyutlu düzensiz dizinin alt elemanlarini ayarlama
intUcBDuzensizDizi[0] = new int[2][];
intUcBDuzensizDizi[0][0] = new int[3];
intUcBDuzensizDizi[0][1] = new int[4];
 
intUcBDuzensizDizi[1] = new int[3][];
intUcBDuzensizDizi[1][0] = new int[2];
intUcBDuzensizDizi[1][1] = new int[5];
intUcBDuzensizDizi[1][2] = new int[3];
 
//3 boyutlu düzensiz diziye deger atama
intUcBDuzensizDizi[0][0][0] = 129;
intUcBDuzensizDizi[0][0][1] = 65;
intUcBDuzensizDizi[0][1][0] = 119;
intUcBDuzensizDizi[0][1][1] = 35;
 
intUcBDuzensizDizi[1][1][1] = 30;
intUcBDuzensizDizi[1][2][1] = 37;
Örneklerimizde hep integer tipinde veri tutan dizilerden bahsettik. Örneklerle string deger tutan dizilerin nasil kullanildigini basitçe anlatalim.
?
1
string[] isim = new string[4];
Dizi elemanlarinin degerlerini olusturma aninda vermek
?
1
2
3
4
5
6
7
8
9
10
11
string[] isim = new string[4]{"Sabri","Seher","Ali","Metin"};
 
//veya
string[] isim2 = new string[] { "Sabri", "Seher", "Ali", "Metin" };
 
//veya
string[] isim3 = { "Sabri", "Seher", "Ali", "Metin" };
 
//veya tanimlama ve deger olusturma islemini ayri satirlarda yapma
string[] isim4;
isim4 = new string[4] { "Sabri", "Seher", "Ali", "Metin" };
Ilk olusturma aninda elemanlara deger verme islemini 2 boyutlu dizilerde de asagidaki gibi yapabiliriz.
?
1
string[][] isimListesi = { new string[] { "Sabri", "Seher" }, new string[] { "Ahmet", "Mehmet", "Zuhal", } };

Yorumlar

Bu blogdaki popüler yayınlar

Linux En Az Sistem Gereksinimi İsteyen Dağıtımları Değerlendirilmesi

Linux İşletim Sisteminin Dağıtımlarının En az sistem gereksinimi isteyen sürümleri, değerlendirilmesi aşağıdadır, Değerlendirilen dağıtımlar şunlardır: Ubuntu Xubuntu Lubuntu Damn Small Linux Linux Mint Fedora Opensuse Debian Rat Hat Suse Linux Suse Linux Sistem Gereksinimleri: Pentium 1-4 ya da Xeon; AMD Duron, Athlon (XP, MP ya da 64), Sempron ya da Opteron 256MB RAM 500MB boş disk alanı 800x600 yada üstü resolution Rat Hat Memory Gerekli: 4 GB of memory Önerilen: 8 GB of memory CPU Gerekli: Intel Core processor, 2.4GHz, 512K cache or equivalent Önerilen: Intel multi-core processor, 2.4GHz dual processor, 512K cache or equivalent Storage 5 GB alan temel kurulum için. 40 GB alan Channel başına. 10 GB alan Cache dizini için(/var/cache/rhn) Disk yapılandırması olarak Raid 5 tavsiye edilir. Database İlk kurulum için 12 GB alan önerilir. Client ve channel hesaplamaları ise, 250 KB alan client system başına, 500 KB alan çhannel başına, ayrıca 230 KB channel da

JavaScript ile Popup Pencereleri

Popup pencereleri bir sayfa içinde ek bir pencere açma islemidir. Popup pencereler JavaScript kullanarak açilirlar. Popup pencereler yaygin olarak reklam göstermek amaciyla kullanilir. Diger bir kullanim amaci ise yardim sayfalari tasarlamak içindir. Ihtiyaciniz dogrultusunda farkli amaçlar için kullanilabilirler. Popup pencereler; Sayfa yüklenmesinde,Sayfadan çikildiginda,Kullanici bir linki tikladiginda açilabilir. Sayfa yüklenirken veya kapatilirken bir popup açmak için body etiketi içine asagidaki kodu yazmaniz yeterlidir. Sayfa yüklenirken ? 1 <body onload= "javascript: alert(Load islemi!')" > Sayfa Kapatilirken ? 1 <body onunload= "javascript: alert('UnLoad islemi!')" Link tiklandiginda ? 1 <a href= "javascript: alert('link Tiklandi!')" >Popup Aç!</a> Popup olarak yeni bir pencere açmak istiyorsak window.open() metodunu kullaniriz. Window.open metodun