19 Oca 2016

C#'da GenericList (Liste) Kullanımı

  • List, generics tipinde bir C# özelliğidir. 
  • Listeler dinamik dizilerdir. Bir listeyi tanımlarken boyut bildirmemize gerek yoktur.
  • Listeler dizilerden daha yavaştır.
  • Aynı dizi üzerinde birçok işlem yapan, performans spesifik bir uygulama geliştirmiyor isek ve listelerin özellikleri bizim için kolaylık yaratacaksa List kullanabiliriz.
  • Bir liste aşağıdaki gibi tanımlanabilir. < > işaretlerinin arasına hangi veri tipi yazılırsa liste o tipte elemanları tutar.
List<string> arkadaslarim = new List<string>();
List<int>    sayiList = new List<int>();
  • Listenin hafızada ayıracağı yer de tanım sırasında verilebilir. Listelerin kapasite tanımları sadece performans amaçlı bir ön tanımdır. Aşılırsa hata vermez.
List<string> telefonNumaralari = new List<string>(5000); //kapasite belirtilmiş liste
  • Bir liste oluşturup eleman eklemenin 2 çeşidi vardır.İlkinde aşağıdaki gibi önce liste oluşturulur, sonra eleman eklenir.
List<int> list = new List<int>(); 
list.Add(2); 
list.Add(3); 
list.Add(5); 
Console.WriteLine(list[0]);  //ekrana 2 yazdırılır
  • İkinci yöntemde ise Liste oluşturulduğu anda aşağıdaki gibi elemanları eklenir. Bu kod parçası Debug işleminde tek satır olarak okunur ve içine girilmez.
List<string> sehirList = new List<string>()
            {
                "ankara",
                "istanbul",
                "izmir",
                "bursa"
            };
  • Birden fazla eleman ekleme için AddRange kullanılır;
  • list.AddRange(new int[] { 7, 9, 11 }); //birden fazla eleman ekleme 
  • Bir listeden bir elemanı silmek için Remove(eleman), bir indeksi belli elemanı silmek için RemoveAt(indeks) kullanılır. Birden fazla elemanı silerken ise RemoveRange(indeks, sayı) kullanılır.
  • list.RemoveAt(0); 
    
    list.Remove(7); //eleman silme 
    list.RemoveRange(3, 2); //birden fazla eleman silme
  • Listenin içinde bir değerin olup olmadığını ararken Cı,ontain metodundan yararlanırız. Eğer parantez içerisindeki değer listede var ise sonuç true yok ise false döner.
  • list.Contains(5); //listenin içinde 5 değeri var mı diye kontrol eder. Sonuç bool tipte döner.
  • Liste içinde bir elemanın indeksini arıyorsak Indexof() metodundan yararlanırız.
  • list.IndexOf(5); //liste içinde dönüp değeri 5 olan elemanı bulunca durur

"IndexOf( ) kullanılarak liste içinde bir değerin indeksi aranırken, eğer o değer listede yoksa -1 değerini döndürür."
  • List class'ında listenin kaç elemanı olduğunu Count ile öğreniriz. Dizilerin boyutu hiç değişmez ama listede eleman ekleyip çıkardıkça Count değişir.
  • list.Count //listenin kaç elemanı olduğunun sayısını getirir. eleman ekleyip çıkardıkça count değişir.(arraylarde değişmez.)
Oluşturulan bu listeleri bir listBox'da göstermenin de bir kaç yolu vardır;
  • DataSource kullanarak listBox'da gösterme:
listBox1.DataSource = sehirList;
  • For ya da Foreach Döngüleri Kullanarak;
            for (int i = 0; i < sehirList.Count; i++)
            {
                listBox1.Items.Add(sehirList[i]);
            }

            foreach (string sehir in sehirList)
            {
                listBox1.Items.Add(sehir);
            }
  • Bir liste bir diziye ya da bir dizi bir listeye metotlar yardımıyla aşağıdaki gibi dönüştürülebilir.
sehirList.ToArray(); //listeyi arraya çevirme
//sayilar diye bir dizxi olduğnu varsayalım
sayilar.ToList();   //arrrayı listeye çevirme

LINQ ile Liste Kullanımı
list.Find(item => item == 5); //5'e eşit olan elemanı bulup sonucu döndürür.
list.Find(item => item > 3); //3'ten büyük ilk elemanı bulup sonucu döndürür.
list.FindAll(item => item > 3).Count(); //3'ten büyük bütün elemanları bulup kaç tane bulduğunu döndürür.
list.RemoveAll(item => item > 3); // değeri 3'ten büyük olan bütün liste elemanlarını siler.
list.Clear(); //bütün liste elemanlarını siler.
list.Sort(); //listeyi alfabetik sıralar.
list.Reverse(); //liste elemanlarının sırasını ters çevirir.

Hiç yorum yok:

Yorum Gönder