C# Diziler ve Dizi Metotları

nhtctn nhtctn

Bellekte ard arda yer alan aynı türden nesneler kümesine dizi(array) denilmektedir. Bir dizi içindeki bütün elemanlara aynı isimle ulaşılır. Yani dizideki bütün elemanların isimleri ortaktır. Elemanlar arasındaki ayır edici özellik, bellekteki yeridir.

Örneğin 6 elemanlı ve tamsayı elemanlardan oluşan bir dizinin bellekteki görüntüsü aşağıdaki gibidir.

Bir dizinin elemanlarına [] (index operatörü) ile ulaşılır. Dikkat etiyseniz 6 elemanlı bir dizinin son elemanına 5 indeksi ile ulaşılıyor. Bunun sebebi indeksin 0’dan başlamasıdır. Yani bir dizinin ile elemanına DiziAdi[0] şeklinde erişim sağlanır.

Dizi Tanımlama

C# dilinde bütün diziler System.Array sınıfından türetilir. Yani biz bir dizi tanımladığımızda aslında Array sınıfı türünden bir nesne tanımlamış oluyoruz.

Bir dizinin oluşturulması iki şekilde yapılabilir, birincisi bildirim ve tanımlamanın aynı satırsa yapılması:

int [] dizi = new int [10];

İkincisi ise bildirim ve tanımlamanın ayrı satırlarda yapılmasıdır:

int [] dizi;
dizi = new int [10];

Yukarıdaki her iki kullanımda aynıdır. Dizilerin herhangi bir elemana ulaşmak için [] operatörü kullanılır. Örneğin, dizinin ilk elemanını başka bir değişkene aşağıdaki gibi atayabiliriz.

int i = dizi[0];

Aynı şekilde 6 elemanlı bir dizinin son elemanına aşağıdaki şekilde erişebiliriz.

int i = dizi[5];

Farklı bir şekilde dizi tanımlama yöntemi

string [] dizi1 ={"Ali","Veli","Deli"};
int [] dizi2 = {1,2,3};
float [] dizi3 ={1f,2f,3f};

Yukarıdaki şekilde tanımlanan dizilerin boyutu 3 olarak tayin edilir.

Bir dizinin boyutu bir kez belirlendikten sonra artık değiştirilemez. Yani dizinin boyutunu dinamik olarak değiştirmemiz mümkün değildir. Ancak boyutu dinamik olarak değişebilen çeşitli koleksiyon tabanlı dizi sınıfları mevcuttur. ArrayList sınıfı tipik olarak bunlara bir örnektir. Boyutu dinamik olarak değişen dizileri ilerleyen makalelerimizde göreceğiz.

Birden fazla dizinin tanımlanması ise aşağıdaki şekilde yapılır.

int [] dizi1 = new int [10], dizi2 [] = new int [10];

Birden fazla dizi bildirimi ise;

int [] dizi1,dizi2;

şeklinde yapılabilir.dizi1 ve dizi2’nin int türünden bir dizi olduğunu bildiriliyor. Bu bildirimden sonra her iki dizi için ayrı ayrı bellekte alan tahsisatı (allocation) yapılır.

Döngülerler Dizi İşlemleri

Bu kısımda tanımladığımız dizilerin elemanlarına çeşitli döngüler ile nasıl erişebileceğimizi, dizi elemanlarına rastgele değerleri nasıl atayacağımızı inceleyeceğiz.

Bir dizinin elemanlarına ulaşmak için tipik olarak dizinin boyutu kadar dönen döngüler kurulur. Dizilerin elemanları içinde genellikle for döngüler ve foreach döngüleri ile dolaşılır.

Rastgele Sayı Üretme (Random Sınıfı)

Dizilerin içinde dolaşmadan önce, tanımladığımız dizilere tek tek değerler atamak yerine dizi elemanlarına rastgele değerler verebilmek için rastgele sayı üretme ile ilgili mekanizmayı inceleyelim.

Rastgele sayı üretmek Bilgisayar Bilimlerinde en önemli araştırma konularından biri olmuştur. Biz burada rastgele sayı üretme algoritmalarını anlatmayacağız. Sadece rastgele sayı üretmek için .NET Framework sınıf kütüphanesindeki System.Random sınıfını kullanacağız.

Rastgele sayı üretmek için öncelikle Random sınıfı türünden bir nesne tanımlamamız gerekir. Bunu aşağıdaki şekilde yapıyoruz.

Random rnd = new Random();

rnd nesnesini new anahtar sözcüğü ile oluşturduktan sonra, rnd nesnesinin metotlarına erişebiliriz. rnd nesnesi üzerinden rastgele sayı üretmek için aşağıdaki kullanımlardan biri kullanılabiliriz.

1- int rastgeleSayi = rnd.Next(10,20);
2- int rastgeleSayi = rnd.Next(50);
3- int rastgeleSayi = rnd.Next();
4- double rastgeleSayi = rnd.NextDouble();

1.örnekte 10 ile 20 arasında int türünden rastgele bir sayı üretiilir.

2.örnekte 0 ile 50 arasında int türünden rastgele bir sayı üretilir.

3.örnekte int türünden pozitif herhangi bir sayı üretilir.

4.örnekte ise double türünden 0.0 ile 1 arasında rastgele bir sayı üretilir.

Biz bu bölümde sadece 1.örneği kullanacağız.

            Random rnd = new Random();
            int[] dizi = new int[10];

            for (int i = 0; i < dizi.Length; i++)
            {
                dizi[i] = rnd.Next(1, 50);
            }

            foreach (var item in dizi)
            {
                Console.WriteLine(item);
            }

Yukarıda öncellikle Random sınıfımızdan rnd nesnemizi ürettik.

Ardından 10 elemanlı int türünden bir dizi oluşturduk.

For döngüsü ile dizimize rastgele 1 ile 50 arasında değer ataması gerçekleştirdik.

Son olarak foreach döngüsü ile ile dizimizi dolaşarak ekrana yazdırdık.

Çok Boyutlu Diziler(multi dimensional arrays) nedir?           

Diziler konusunda dizilerin temel olarak ne olduğunu ve nasıl çalıştığını anlatmıştık. Çok boyutlu diziler de en basit anlatımıyla tanımladığımız bir dizinin içerisine eklediğimiz başka bir dizi olarak düşünebilirsiniz.

Çok boyutlu dizileri 2 veya daha fazla boyut olarak tanımlayabilirsiniz. Ama programlamada ağırlıklı olarak 2 ve 3 boyutlu diziler kullanılmaktadır. 4 ve üzerindeki boyutlar hem anlaşılabilirlik olarak zor bir yapıdadır hem de işlemsel olarak da karmaşık kontroller gerektirir.

Çok boyutlu diziler de kendi içerisinde iki farklı yapıda bulunabilir.

       Matris diziler (matrix arrays):  Her bir dizi elemanının aynı sayıda eleman içerdiği dizilerdir. Yapısal olarak matrisleri andırdığı için matris dizileri olarak anılmaktadır.

       Düzensiz diziler (jagged arrays): Her bir dizi elemanının farklı sayıda eleman içerdiği dizilerdir.

Çok boyutlu dizilerin tanımlanması

       Tek boyutlu dizileri tanımlama kurallarındaki geçerli olan basamaklar çok boyutlu diziler için de geçerlidir. Çok boyutlu dizileri 3 farklı şekilde tanımlayabiliriz;

       Aşağıda 2 boyutlu “3×4” dizi tanımlamaları yapılmıştır.

Bildirmeyi (declare) ve tanımlamayı (initialize) aynı anda yapabildiğimiz yöntem;

int[,] matris = new int[3, 4];

   Bildirme ve tanımlamayı ayrı satırlarda yapabildiğimiz yöntem;

int[,] matris;
matris = new int[3, 4];

Çok boyutlu dizi içerisine değer atamalarını da yaptığımız yöntem;

int[,] matris = {
                  { 0, 1, 2, 3} ,
                  { 4, 5, 6, 7} , 
                  { 8, 9, 10, 11}
                };

3 boyutlu dizi tanımlamaları;

int[,,] matris3d = new int[3, 4, 5];
int[,,] matris3d;
 
matris3d = new int[2,2,3];
int[,,] matris3d = {
                {
                    {0,1},{0,2},{0,3},
                    {0,4},{0,5},{0,6},
                } ,
                {
                    {1,1},{1,2},{1,3},
                    {1,4},{1,5},{1,6},
                } ,
            };

Matris dizileri nedir?

Her bir satırdaki elemanın eşit sayıda eleman içerdiği matris görünümündeki dizilerdir.

        “2×3” matris dizi oluşturup içerisine elemanları yerleştirelim ve ekrana yazdıralım; 

int[,] dizi2d = new int[2, 3]; 
 
dizi2d[0, 0] = 1;
dizi2d[0, 1] = 2;
dizi2d[0, 2] = 3;
 
dizi2d[1, 0] = 4;
dizi2d[1, 1] = 5;
dizi2d[1, 2] = 6;
 
for (int i = 0; i < dizi2d.GetLength(0); i++)
{
    for (int j = 0; j < dizi2d.GetLength(1); j++)
    {
        Console.Write(dizi2d[i,j] + "\t");
    }
    Console.WriteLine();
}
*Ekrana yazdırırken kullandığımız ”\t” karakteri ile sayılar arasında tab tuşu kadar boşluk bırakmış oluruz.
*Döngülerde kullandığımız {diziAdı}.GetLength() isimli fonksiyon c# tarafından Array sınıfında kullanılabilen bir fonksiyondur. Bu fonksiyonla beraber verdiğimiz indekse karşılık gelen dizinin uzunluğunu vermektedir.

Düzensiz diziler nedir?

Matris dizilerinde gördüğünüz üzere her bir satırdaki eleman eşit sayıda kolon elemanı almaktaydı. Düzensiz dizilerde ise bu düzen değişmekte ve her bir satırdaki elemana farklı kolon tanımlaması yapılmaktadır.

       Düzensiz matris tanımlaması aşağıdaki gibi yapılmaktadır;

int [][] duzensizMatris = new int[3][];
duzensizMatris[0] = new int[2];
duzensizMatris[1] = new int[3];
duzensizMatris[2] = new int[4];

Burada tanımladığımız matrisin tablosal görüntüsü aşağıdaki gibi olur;

duzensizMatris[0][0]duzensizMatris[0][1]
duzensizMatris[1][0]       duzensizMatris[1][1]duzensizMatris[1][2]
duzensizMatris[2][0]duzensizMatris[2][1] duzensizMatris[2][2]duzensizMatris[2][3]

System.Array Sınıfı – Dizi Özellikleri ve Metotları

Bu kısımda, dizi olarak tanımladığımız değişkenlerin Array sınıfından türetmiş olduklarından dolayı sahip oldukları birtakım metotları ve özellikleri inceleyeceğiz.

Özellikler:

IsFixedSize: Dizinin eleman sayısının sabit olup olmadığını verir.(bool)

IsReadOnly: Dizideki elemanların sadece okunabilir olup olmadığını verir.(bool)

Length: Dizideki eleman sayısını verir.(int)

Rank: Dizinin boyutunu verir. (int)

Metotlar:

BinarySearch: Tek boyutlu dizide binary search algoritmasına göre arama yapar.

Clear: Dizinin elemanlarını varsayılan değere çeker.

Clone: Dizinin bit bit kopyasını çıkarır.

Copy: Dizinin bir bölümünü başka bir diziye kopyalar. Gerekli tür dönüştürme ve boxing işlemleri yapılır.

CopyTo: Bir dizinin belirlenen kısmını başka bir diziye kopyalar.

GetLength: Dizideki eleman sayısını verir.

GetValue: Dizideki ilgili elemanın değerini verir.

IndexOf: Dizi içerisindeki bir değerin ilk görüldüğü indeksi verir.

Reverse: Diziyi tersine çevirir.

SetValue:Bir dizinin bir elemanına değer atar.

Sort: Bir boyutlu dizileri sıralamaya yarar.

CreateInstance: Yeni bir dizi nesnesi oluşturur.

Yorum yazın

BENZER YAZILAR

C# String ifadeler ve Metotlar

String veri tipi metinsel ifadeler saklamak için kullandığımız veri türüdür. Karakter dizilerinden oluşmaktadır. Aşağıdaki bir örnek verilmiştir. Console.Write("İsmini…

13 Aralık 2020