24 Nisan 2013 Çarşamba

Koleksiyonlar (Collections) 1

Koleksiyonlar, System.Collections namespace' i altında yer alırlar, aynı türden verileri barındırabildiği gibi farklı tür verileri de içinde barındırabilir. Eleman sınırı konulmadan, herhangi bir eleman sayısı verilmeden tanımlanabilirler. Koleksiyon içinde tutulan değerler boxing ve unboxing işlemlerine tabi tutulurlar. 3 gruba ayrılırlar:

  • Generic
  • Non Generic
  • Specialized

1.Non Generic Collections

Farklı türlerdeki verilerin bir arada saklanabildiği, içerisine aktarılan değerlerin, boxing(değer türünden referans türüne dönüşüm) işlemi ile object türüne dönüştürülerek tanımlandığı koleksiyon türleridir. System.Collections namespace' i içerisinde yer alırlar. Non Generic koleksiyon başlığı altında 3 sınıf var:

  • ArrayList
  • Hashtable
  • SortedList

1.1 ArrayList Sınıfı


Koleksiyonlar, System.Collections namespace' i altında yer alırlar, aynı türden verileri barındırabildiği gibi farklı tür verileri de içinde barındırabilir. Eleman sınırı konulmadan, herhangi bir eleman sayısı verilmeden tanımlanabilirler. Koleksiyon içinde tutulan değerler boxing ve unboxing işlemlerine tabi tutulurlar. 3 gruba ayrılırlar:
  • Generic
  • Non Generic
  • Specialized
1.1.1. Add Metodu
ArrayList içerisine eleman eklemek için kullanılır.

ArrayList isimler = new ArrayList();
isimler.Add("Ali");
isimler.Add("Veli");
Response.Write(isimler[0]); // Ali

ArrayList içerisine farklı değişken tiplerinden olan elemanlar aynı anda eklenebilir.

ArrayList isimler = new ArrayList();
isimler.Add("Ali");
isimler.Add("a");
isimler.Add(123);

ArrayList içine eklediğimiz bir değeri daha sonra indeks numarası üzerinden değiştirebiliriz.


ArrayList isimler = new ArrayList();
isimler.Add("Ali");
isimler[0] = "Veli"; // Ali artık Veli oldu

1.1.2. Insert Metodu
Add metodu kullanılarak yapılan eklemelerde eklenen her eleman dizinin sonuna eklenir. Dizi içerisinde istenen bir yere eleman eklemek için Insert metodu kullanılır.

ArrayList isimler = new ArrayList();
isimler.Add("Ali");
isimler.Insert(0, "Veli"); // Artık ilk sırada Veli var, Ali' nin index numarası 1 oldu.

Ayrıca FixedSize Metodu ile sabit kapasiteli ArratList tanımlayabiliriz.

ArrayList isimler = new ArrayList();
isimler.Add("Ali");
isimler.Add("a");
isimler.Add(123);
ArrayList yeni_isimler = ArrayList.FixedSize(isimler);
yeni_isimler.Insert(0, "Deneme"); // Burası çalışmaz.

Fakat FixedSize olan bir ArrayList' te eleman değiştirme işlemini yapabiliriz.

1.1.3. Sort Metodu
Dizileri sıralama amacı ile kullanılır.


ArrayList isimler = new ArrayList();
isimler.Add("Ali");
isimler.Add("Veli");
isimler.Add("Aksoy");
isimler.Sort();

1.1.4. Count Özelliği
Bir dizinin eleman sayısını bulmak için kullanılır.


ArrayList isimler = new ArrayList();
isimler.Add("Ali");
isimler.Add("Veli");
isimler.Add("Aksoy");

for (int i = 0; i <= isimler.Count - 1; i++)
        {
            Response.Write(isimler[i] + "<br/>");
        }

Şimdi yukarıdaki kodda önemli bir nokta var. isimler.Count - 1 ifadesi.... isimler.Count bize 3 değerini döndürür. Yani dizimiz 3 elemanlıdır; Ali, Veli, Aksoy. Fakat biz i değişkeni ile dizimizin index numaralarını alacağız. Index 0' dan başladığı için i en büyük 2 olabilir. Biz isimler.Count deseydik program hata verecekti, çünkü index numarası 3' e eşit olan bir eleman yok.

1.1.5. Remove Metodu
Dizi içerisinden eleman silmek için kullanılır.

isimler.Remove("Ali");


1.1.6. RemoveAt Metodu
Dizi içerisinden index değeri belirtilen elemanı silmek için kullanılır.

isimler.RemoveAt(isimler.Count - 1); // index değeri 2 olan Aksoy elemanını siler.


1.1.7. Clear Metodu
Dizi içerisindeki elemanların hepsini silmek için kullanılır.

isimler.Clear();


1.1.8. Reverse Metodu
Diziyi tersine çevirmek için kullanılır. Yani çıktı Ali, Veli, Aksoy yerine; Aksoy, Veli, Ali olur.


1.1.9. GetRange Metodu
Bir dizinin belirtilen kısmını geriye döndüren bir metoddur.

Dizi_adı.GetRange(index, adet);

index : dizinin başlangıç değerini beliritir.
adet : Dizinin başlanıç değerinden itibaren kaç adet elemanın alınacağını beliritir.



ArrayList isimler = new ArrayList();
isimler.Add("Ali");
isimler.Add("Veli");
isimler.Add("Aksoy");
ArrayList digerisimler = isimler.GetRange(0, 2);


foreach (string eleman in digerisimler)
{
Response.Write(eleman + "<br/>");
}

Yukarıdaki kod bize Ali, Veli sonucunu verir. (ilk indexten başla ve iki adet eleman al)


1.1.10. AddRange Metodu
Bir diziye belirtilen başka bir diziyi eklemek için kullanılır.


ArrayList isimler = new ArrayList();
isimler.Add("Ali");
isimler.Add("Veli");
isimler.Add("Aksoy");


ArrayList digerisimler = new ArrayList();
isimler.Add("li");
isimler.Add("eli");
isimler.Add("soy");

diller.AddRange(digerdiller);

foreach(string eleman in diller)
{
Response.Write(eleman);
}


1.1.11. InsertRange Metodu
Belirtilen bir diziyi, belirtilen index numarasından başlayarak başka bir diziye eklemek için kullanılan metoddur.

HedefDizi.InsertRange(index, EklenecekDizi);

1.1.12. RemoveRange Metodu
Belirtilen index numarasından itibaren belirtilen sayıdaki elemanı diziden silmek için kullanılan metoddur.

DiziAdı.RemoveRange(index, adet);

1.2. HashTable Sınıfı

System.Collections sınıfı altında yer alır, içerisindeki değerleri index numarasıyla değil de, anahtar yardımıyla saklar. Hashtable içerisindeki anahtar ve değerlere ICollections arayüzünü kullanarak erişebiliriz.

Hashtable isimler = new Hashtable();
        isimler.Add("A", "Ali AKSOY");
        isimler.Add("B", "Burak GÖL");
        isimler.Add("Y", "Yakup BABALI");

        ICollection degerler = isimler.Values;

        foreach (var deger in degerler)
        {
            Response.Write(deger + "<br/>");
        }

Bu kod sonucunda ekranda elemanların Value değerleri tek tek yazdırılır. ICollection ile elemanların key değerlerinde ulaşmak isteseydik;

ICollection degerler = isimler.Keys; yazacaktık.

ICollection ile sadece key veya sadece value değerlerini tutabiliyoruz. Bir de DictionaryEntry var. DictionaryEntry  sayesinde hem key hem de value değerlerine aynı anda erişebiliyoruz. Şimdi bunu görelim:

Hashtable isimler = new Hashtable();
isimler.Add("A", "Ali AKSOY");
isimler.Add("B", "Burak GÖL");
isimler.Add("Y", "Yakup BABALI");

foreach(DictionaryEntry eleman in isimler)
{
Response.Write(eleman.Key + "=" + eleman.Value);
}

Hashtable içerisinde bir anahtar ya da değerin mevcut olup olmadığını belirlemek için ContainsKey ve ContainsValue metodları kullanılabilir. Bu metodlar geriye boolean değer döndürür.

isimler.ContainsValue(aranan)

1.2. SortedList Sınıfı

Elemanlarına erişimin hem index numaraları hem de anahtar yardımıyla yapılabildiği koelksiyon türüdür. İçerisindeki değerleri sıralı olarak saklar.

IndexOfKey metodunu kullanarak, anahtar ismini verdiğimiz bir elemanın index numarasını elde edebiliriz.

isimler.IndexOfKey("A");

IndexOfValue ile değer ismini verdiğimiz elemanın index numarasını öğrenebiliriz.

GetKey metodunu kullanarak index değerini belirttiğimiz bir elemanın anahtarını elde edebiliriz. Örneğin 2 nolu index değerine sahip anahtarı elde etmek için;

isimler.GetKey(2);

GetByIndex metodunu kullanarak index değerini belirttiğimiz bir elemanın değerini elde edebiliriz.

0 yorum:

Yorum Gönder