C# Diziler / Koleksiyonlar

Kruvazör

Ar-Ge Ekibi Lideri
28 Mar 2020
1,785
2,704
Liman


Herkese merhaba arkadaşlar bugün sizlerle c# dilinde diziler ve koleksiyonları konuşacağız
öncelikle dizilerden başlayalım.

TAHMİNİ OKUMA SÜRESİ: 8 dakika 4 saniye


0.1 DİZİLER
Aynı tipteki değişkenleri bellekte saklamak isteğimizde dizileri kullanırız.
Dizideki tüm değişken tipleri birbiriyle aynıdır.

dizilerde eleman sayısı belirtmek zorunludur
dizilerde kullanılmayan elemanlar da bellekte yer kaplar bu yüzden performansı ve donanımı dikkate almamız gerekmektedir


ou4if6t.jpg


fakat diziler sadece tek tip değildir kendi içinde farklı tipleri de bulunmaktadır
örneğin tek boyutlu çok boyutlu...


farklı dizi tiplerini basitçe tanımlamayı gösterelim o halde.
C#:
          int[] numbers = new int[3] {10,14,1};
                   int[] numbers1 = { 1, 2, 3, 4 };
 
            string[] names ={"leif erikson", "Sweyn Forkbeard","eric bloodaxe" };     


            // iki boyutlu dizi
            int[,] multiDimensionalArray1 = new int[2, 3];

            int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } };

            // düzensiz dizi
            int[][] jaggedArray = new int[6][];

dizilerin genel olarak bu şekilde tanımlayabiliriz

şimdi basitçe tek boyutlu dizilerde farklı işlemler yapalım
C#:
int[]

 sayılar = new int[20] { 10, 14, 123, 245, 21, 123, 12, 157, 83, 85, 93, 57, 37, 36, 35, 81, 78, 45, 92, 20};



            int toplam = sayılar[7] + sayılar[12];  //belirtilen indexlerdeki değerlerin toplanması
           Console.WriteLine(toplam +" toplam " +"\n" + "----------"); 

            int aranan = 245;

            int konum = Array.IndexOf(sayılar, aranan);  //dizide eleman arama

            Console.WriteLine(aranan + " sayının listedeki konumu : " + konum + "\n" + "----------");

            
            

            Array.Resize(ref sayılar, 25); //dizinin yeniden boyutlandırılması işlemi 
            
            sayılar[21] = 24;
            sayılar[22] = sayılar[3] + sayılar[9] + sayılar[16];          //çeşitli matematiksel işlemler ile dizinin belirtilen indexlerindeki değerlerin değiştirilmesi 
            sayılar[23] = sayılar[19] - sayılar[1];                                // dizilerde değerlere ulaşmak için index numaralarını kullanırız
            sayılar[24] = sayılar[4] * sayılar[1] * sayılar[2] * sayılar[3];
            

            Array.Clear(sayılar,15,3);     //dizinin 15. elemanından itibaren sırasıyla 3 değeri silme


            Console.WriteLine("eleman sayısı:" + sayılar.Length+"\n"+"----------");  //eleman sayısını yazdırma


            for (int i = 0; i < sayılar.Length; i++)              //dizinin elemanlarını yazdırma
            {
              
                Console.WriteLine(sayılar[i]+" "+i+".indexteki eleman"+"\n"+"---------------------------");
            }

Kod:
OUTPUT
245 sayının listedeki konumu : 3
----------
194 toplam
----------
eleman sayısı:25
----------
10 0.indexteki eleman
---------------------------
14 1.indexteki eleman
---------------------------
123 2.indexteki eleman
---------------------------
245 3.indexteki eleman
---------------------------
21 4.indexteki eleman
---------------------------
123 5.indexteki eleman
---------------------------
12 6.indexteki eleman
---------------------------
157 7.indexteki eleman
---------------------------
83 8.indexteki eleman
---------------------------
85 9.indexteki eleman
---------------------------
93 10.indexteki eleman
---------------------------
57 11.indexteki eleman
---------------------------
37 12.indexteki eleman
---------------------------
36 13.indexteki eleman
---------------------------
35 14.indexteki eleman
---------------------------
0 15.indexteki eleman // BOŞ OLAN YERLERE 0 ATAR
---------------------------
0 16.indexteki eleman
---------------------------
0 17.indexteki eleman
---------------------------
92 18.indexteki eleman
---------------------------
20 19.indexteki eleman
---------------------------
0 20.indexteki eleman
---------------------------
24 21.indexteki eleman
---------------------------
408 22.indexteki eleman
---------------------------
6 23.indexteki eleman
---------------------------
8859690 24.indexteki eleman
---------------------------


0.2 KOLEKSİYONLAR
6ly4o0n.png

böyle bir ayrımın olma sebebi değişkenleri alış biçimleridir
generic olanlar sadece seçilen tipte veri alırken
non generic olanlar her tipte veriyi kabul edebilir.


4nn44ie.png


Öncelikle Generic koleksiyonların Non-Generic koleksiyonlardan artısı eksisi nedir onu anlatalım.
Non-Generic koleksiyonlar verileri object tipten aldıkları için Boxing işlemine uğruyorlar.
ve bu yüzden elemanlara erişirken Unboxing işlemi yapıyoruz.

performans açısından daha iyi olanı belirleyip kullanmak önemlidir


bugün sizlerle koleksiyonlarda arraylist,list ve stack yapılarını inceleyeceğiz

0.3 ARRAYLİST

ArrayList değişken türlerine bakmadan tüm değişken tiplerine değer tutabilir.

mesela int türünde değerleri alabildiği gibi string türündeki değerleride almaktadır.
Her yeni eleman eklendikçe kapasitesi otomatik olarak artmaktadır.

arraylist için basit bir örnek yapalım.
C#:
ArrayList liste = new ArrayList();  //tanımlama
            
            liste.Add("bjorn ironside");      //ekleme
            liste.Add("1071");    //gördüğünüz üzere farklı veri tipleri kullanıyorum
            liste.Add(14.4);
            liste.Remove("1071");       //silme
          
            Console.WriteLine("Count: {0}", liste.Count); //eleman sayısı
            Console.WriteLine("Capacity: {0}", liste.Capacity); // kapasite
            Console.WriteLine("Name: {0}", liste.GetType().Name);
               Console.WriteLine("------------------");
            foreach (var item in liste)
            {
               Console.WriteLine(item+"\n"+"-----------");    //listeleme

            }

//çıktı
Count: 2
Capacity: 4
Name: ArrayList
------------------
bjorn ironside
-----------
14.4
-----------


0.4 LİST
list yapısı generictir.
sadece seçilen veri tipindeki elemanları kabul eder
performans açısından bakarsak

List>arraylist diyebiliriz.
sebebi ise yukarıda da belirttiğim boxing unboxing işlemleridir
Eğer koleksiyon içinde bütün veriler aynı tipte olacaksa ArrayList yerine Generic List koleksiyon yapısı kullanılır


örnek:
C#:
  // tek tip değişken alır ( belirlenen tip)

            List<int> list1 = new List<int>();  //tanımlama

        //   list1.Add("aaaaa");   kodu çalıştırdığınızda bu kısım çalışmayacaktır çünkü dediğim gibi bu list sadece int tipindeki verileri tutacaktır 

            list1.Add(999);
            list1.Add(913);
            list1.Add(93);
            list1.Add(10);
            list1.Add(26);
            list1.Add(30);
            


            list1.Remove(999);    //silme 

            foreach (var item in list1)
            {
                Console.Write(Convert.ToString(item+"\n"));  // int olduğu için dönüşüm yaptırıyorum
            }
0.5 STACK

stack hem generic hem non generic olarak kullanılabilmektedir

ilk eklenen elemanın koleksiyondan en son çıkarıldığı ve en son eklenen elemanında ilk çıkarıldığı bir yapıdır
C#:
                  Stack<int> yigin = new Stack<int>(); 
        // tanımlarken bir sınıf belirtebilirsiniz

            Stack yigin2 = new Stack();
            

            //  Pop(): Stack’in en üstündeki nesneyi çıkarır.
            // Push(): Stack’in en üstüne bir nesne ekler.

       
           yigin2.Push("baldur");
            yigin2.Push("loki");
            yigin2.Push("odin");
            yigin2.Push("hel");
            yigin2.Push(456);  //gördüğünüz üzere farklı veri tiplerini de alabiliyor
            yigin2.Push("fenrir");
            yigin2.Push("vılı");
            yigin2.Push("forseti");
            yigin2.Push("tyr");
            yigin2.Push(666);

            yigin2.Pop(); //Pop işlemi yığının en üst elemanı siler ve döndürür

            Console.WriteLine(yigin2.Peek() + " en üstteki değer");
            Console.Write("---------------" + "\n");




            Console.Write(yigin2.Count+" eleman var"+"\n"); // kaç eleman var
            Console.Write("---------------"+"\n");

            foreach (var item in yigin2)
            {
                Console.WriteLine(item + "\n");
            }

Okuduğunuz için teşekkürler.
Eksik,yanlış varsa lütfen belirtiniz.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.