( 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
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.
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
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( "---------" ); } |
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
Yorum Gönder