Diziler ve Foreach

Diziler, Çok Boyutlu Diziler, Düzenli ve Düzensiz Çok Boyutlu Diziler Nasıl Kullanılır. foreach Döngüsünün Kullanımı

Diziler için aynı tipteki verilerin tutulduğu bir koleksiyon diyebiliriz. Örneğin integer verinin bir yığın şeklinde tutulması için dizileri kullanırız. C# da diziler referans tipinde değişkenlerdendir. C# da tanımlanan tüm diziler System.Array sınıfından türemiş bir nesnedir. C# da diziler aşağıdaki gibi tanımlanır.

<veri tipi>[] <değişken ismi> = new <veri tipi>[<dizinin boyutu>];

 

10 adet integer veri tutan bir dizinin tanım ise

int[] integerDizi = new int[10];


Bir dizinin boyutları sabittir ve kullanılmadan önce belirlenmelidir. Dizi boyutunu belirlemek için başka bir değişkende kullanabilirsiniz.

int boyut = 10;int[] integerDizi = new int[boyut];


Diziyi tanımlama ve başlangıç değerlerini atama işlemini ayrı satırlardada yapabilirsiniz
.

int[] integerDizi;integerDizi = new int[10];


Ayrıca dizileri tanımlarken, dizi içine atmak istediğiniz verileride belirterek dizi tanımlayabilirsiniz. Bunun için kullanacağınız veri tipine uygun olacak şekilde, süslü parantez içinde her biri virgülle ayrılmış dizi elemanlarını yazmanız yeterli
.

int[] integerDizi = {1,2,3,4,5,6,7,8,9};


Yukarıda 10 adet elemanı olan ve değerleri de verilmiş, integer tipinde verileri tutan bir dizi tanımladık. Eğer dizimiz string değerler tutacak olsaydı, süslü parantez içine yazdığımız elemanların her birini çift tırnaklar arasına almamız gerekirdi.

string[] strDizi = { "Sabri", "Metin", "Osman", "Ali" };


Dizi Elemanlara Ulaşmak

Dizi elemanlarına ulaşmak için [indeks] indeks operatörünü kullanırız. Dikkat edilmesi gereken nokta C# da dizilerin elemanları 0. İndeksten başlar, yani eğer 5 elemanlı bir dizimiz varsa bu dizinin birinci elemanı 0. indekste son elemanı ise 4. indekstedir. 5 elemanlı bir dizinin 3. elemanına aşağıdaki gibi erişiriz.

int[] integerDizi = { 1, 2, 3, 4, 5};int ucuncuEleman = integerDizi[2];


Bir dizi içindeki elemanlara ulaşmak için basit bir örnek:

int[] integerDizi = { 4, 8, 23, 64, 35 };for (int i = 0; i < 5; i++){Console.WriteLine("Dizinin {0}. Elemanının Değeri = {1} ", i, integerDizi[i]);}

Yukarıdaki örnekte bir dizi oluşturduk ve bu dizinin eleman sayısı kadar bir for döngüsü kurduk. Döngü içinde diziye ait elemanların değerlerine tek tek ulaştık.

Peki kullandığımız dizinin eleman sayısını bilmeseydik nasıl döngüye girebilirdik. Bütün diziler System.Array sınıfından türemiş nesnelerdir demiştik. System.Array sınıfının Length diye bir özelliği vardır, doğal olarakda tüm dizilerinde bir Length özelliği olur. Dizimizin eleman sayısını dizininAdi.Length diyerek alabiliriz. Yukarıdaki örneği bu yöntemle yeniden yazacak olursak.

int[] integerDizi = { 4, 8, 23, 64, 35 };for (int i = 0; i < integerDizi.Length; i++){Console.WriteLine("Dizinin {0}. Elemanının Değeri = {1} ", i, integerDizi[i]);}


Yukarıdaki kodu çalıştırdığınızda bir önceki örneğimizle aynı sonucu üretir.

Dizilerle ilgili dersimize devam etmeden önce diziler için kullandığımız foreach döngüsüne bakalım.

foreach Döngüsü

Diziler ve koleksiyonların elemanlarına erişmek için basit ve kullanışlı bir döngü çeşidi. Döngüler dersinde bahsetmedik çünkü dizileri anlatmadan foreach döngüsünü anlamaya çalışmak boşuna olacaktı. foreach döngüsünün yapısı aşağıdaki gibidir.

foreach(<dizi içindeki elemaların veri tipi> <değişken ismi> in <diziveyaKoleksiyonadi>){<Kod blogumu>}


Yukarıda for döngüsü ile yaptığımız örneğimiz foreach döngüsü ile yapalım.

foreach (int diziElemanı in integerDizi){Console.WriteLine("Elemanın Değeri = {0} ", diziElemanı);}


Çok daha basit ve kullanışlı olduğunu görebilirsiniz.

·Foreach döngüsü kullanırken ulaştığımız dizi elemanları readonly dir. Yani yukarıdaki örnek üzerinde anlatacak olursak foreach döngüsü içinde diziElemanı adlı integer değişkenin içerdiği değeri değiştiremezsiniz. Eğer değiştirmeye kalkarsanız Cannot assign to 'diziElemanı' because it is a 'foreach iteration variable' hatası alırsınız. Eğer yazdığınız uygulamada dizi elemanlarını döngü içinde değiştirmek istiyorsanız for döngüsü kullanmanızı tavsiye ederim.

·String tipindeki bir değişkende char tipindeki verilerin birleşmesinden oluşmuş bir dizidir. Öyleyse foreach döngüsü kullanarak aşağıdaki gibi bir stringin elemanlarını erişebilirsiniz.

string metin = "C# Diziler Örneği";foreach (char harf in metin){Console.WriteLine("Harf = {0} ", harf);}


Çok Boyutlu Diziler (Multidimensional Array)

Çok boyutlu bir dizi ‘dizinin dizisi’ şeklinde tabir edilebilir. Her elemanı başka bir dizi olan diziler çok boyutlu bir dizidir. Çok boyutlu bir dizi veritabanında her satırında birden fazla kolon bulunan bir tabloya benzetilebilir. Eğer her satırda bulunan her kolon kendi içinde başka bir dizi barındırmıyorsa bu tür dizilere 2 boyutlu diğer bir değişle çok boyutlu diziler denir. Eğer her kolonda kendi içinde başka bir dizi barındırıyorsa bu tür dizilere n boyutlu diziler denir. Burda n ifadesi dizinin derinliğini ifade eder.

Çok boyutlu diziler iki çeşittir;

·Düzenli Diziler: Her satırı aynı sayıda kolon barındıran diziler.

·Düzensiz Diziler (Jagged Array) : Her satırı farklı sayıda kolon barındıran diziler.

Çok boyutlu dizileri şekillerle anlatmaya çalışalım.

Not: Dizilerin ilk elemanının indeks numarasının 0 olduğunu unutmayın.

 

Dizilerin Tanımlanması ve Değer Atamaları

Tek boyutlu bir dizinin nasıl tanımlandığını ve nasıl değer atayacağımızı yukarda anlatmıştık. Şimdi Tek boyutlu dizi dahil tüm dizi tiplerini nasıl tanımlayacağımıza bakalım.

Tek Boyutlu Diziler:

//Dizinin Oluşturulmasıint[] intDizi = new int[5];//Dizi elemanlarına değer atamasıintDizi[0] = 36; //dizinin ilk elemanına 36 değeri atandıintDizi[2] = 26; //dizinin ikinci elemanına 26 değeri atandıintDizi[4] = 32; //dizinin son elemanına 32 değeri atandı

 

Çok Boyutlu Diziler:

//Dizinin Oluşturulmasıint[,] intCokBDizi = new int[2, 3];//Dizi elemanlarına değer ataması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 Elemanlarına Döngü İle Ulaşmak

for döngüsü:

//Dizi elemanlarını 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 değeri : {2}",row,col,intCokBDizi[row,col]);}}

 Örnek :  Sayısal loto için tahminde bulunan program örneği diziler için… 

static void Main(string[] args)
        {
            Console.WriteLine("Bu haftaki şanslı sayılar");
            Console.WriteLine("**************************");
            Console.WriteLine("--------------------------");
            Console.WriteLine("**************************");
            Console.WriteLine();
            Random rnd = new Random();
            int[] rastgelesayi = new int[6];
            for (int i = 0; i < 6; i++)
            {
                rastgelesayi[i] = rnd.Next(2, 49);
            }
            Array.Sort(rastgelesayi);
            for (int i = 0; i < 6; i++)
            {
                Console.Write(rastgelesayi[i] + " ");
            }
            Console.ReadLine();
        }


static void Main(string[] args)
        {
            int[] integerDizi = { 4, 8, 23, 64, 35,56,78,45 };
            for (int i = 0; i < integerDizi.Length ; i++)
            {
                Console.WriteLine("İntegerDizi[{0}]= {1} ", i, integerDizi[i]);
            }
            
            foreach (int i  in integerDizi )
            {
                Console.WriteLine(i);
            }

            object[] nesne = { 4, "kemal", "murat", 5, 3.6M ,7.3};
            foreach (object  i in nesne)
            {
                Console.WriteLine(i);
            }
        }

Add comment

The file '/Custom/Widgets/Calendar/widget.cshtml' does not exist.The file '/Custom/Widgets/Category list/widget.cshtml' does not exist.The file '/Custom/Widgets/Tag cloud/widget.cshtml' does not exist.The file '/Custom/Widgets/Page List/widget.cshtml' does not exist.The file '/Custom/Widgets/Month List/widget.cshtml' does not exist.