Open
Gruplama ve Listeleme Çeşitleri

Array[ ] (dizi)

Diziler, aynı tipte birden fazla değeri bir arada tutmaya yarayan koleksiyonlardır. Dizilerin içerisinde o, dizinin tipinden değerler tutulur.

Verileri Dizi değişkeni ile tutacağız.


    veritipi[] diziadı = {...} ;
    string  [] diziler = {  "Su ", "Tom", "Molly ", "Otsuka", "Omaçinai" }; 
    
    foreach (string item in diziler)
    {
     Response.Write(item );
    }  

Koleksiyon Sınıfı: Generic List <T(veritipi)>

Generic List <T>, bir liste halinde değerleri tutabilen ve onlara ait görevleri yerine getirebilen sınıftır.

Koleksiyonlar, sabit boyutlu değildir. Eleman eklendikçe boyutu dinamik olarak artar.
Farklı veri tipindeki elemanları tutabilir.Projemizin performansını artırmak için, verileri önbellekte depolarız.
İşte Koleyksiyon sınıfları da, okuma / yazma işlemleri için bu bellek bölümünü kullanırlar..

  
    bardak <içindekiler> 
   
    List<string> liste = new List<string>();
    liste.Add("Kahan");
    liste.Add("Berk"); 

    List<E_Kisi> liste = new List<E_Kisi>();
    liste.Add(new E_Kisi { ID=1, Ad = "Kahan"});
 
    List <string> liste = new List<string> { "Kahan", "Berk"  }; 
    

    foreach (string item in liste)
    {
        Response.Write(item);
    }

    Linq ile 
    var query = (from c in liste  select c);
        foreach (var item in query)
        {
             Response.Write(item);
        }

Dictionary Kullanımı

.

Dictionary<int, string> dct = new Dictionary<int, string>();
dct.Add(1, "Suresh");
dct.Add(2, "Trishi");
dct.Add(3, "Praveen");
dct.Add(4, "Rohini");
dct.Add(5, "Sateesh");

foreach (KeyValuePair<int, string> pair in dct)
{
    //Response.Write(pair.Key.ToString() + "  -  " + pair.Value.ToString() + "<br> "); 
    Response.Write(pair);
}
.

<asp:ListBox runat="server" ID="mylistbox"> </asp:ListBox>
protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack) 
    {  
    Dictionary<int, string> fruit = new Dictionary<int, string>();
    fruit.Add(1, "Kiwi"); 
    fruit.Add(2, "Pear"); 
    fruit.Add(3, "Mango"); 
    fruit.Add(4, "Blueberry");
    fruit.Add(5, "Apricot"); 
    fruit.Add(6, "Banana"); 
    fruit.Add(7, "Peach"); 
    fruit.Add(8, "Plum");
    mylistbox.DataSource = fruit;
    mylistbox.DataTextField = "Value";
    this.DataBind();
    }
}  

HashSet<T> Kullanımı

List'e alternatif olarak çıkartılmıştır. verilere erişmek oldukça hızlıdır. HashSet koleksiyonu aynı veriyi ikinci defa içerisine koymaz

.
HashSet<string> myhash1 = new HashSet<string>(); 
myhash1.Add("C"); 
myhash1.Add("C++"); 
myhash1.Add("C#"); 
myhash1.Add("C#");  //tekrar göstermez  


var query =  from x in myhash1 select x ;
foreach (var item in query)
{
    Response.Write(item);
}

ArrayList

ArrayList bjelerden oluşan birer Array yaratır.Eklemek için Add()metodunu , sıralamak için sort() metodunu kullanır

.
ArrayList liste = new ArrayList(); 
liste.Add("C"); 
liste.Add("C++"); 
liste.Add("C#");  

foreach (var item in liste)
{
    Response.Write(item);
}

DataTable Kullanımı

DataTable sınıfından türetilen bir nesne bellekte kendisi için ayrılan yerde tutar.
Satırlardan ve sütunlardan oluşur.
Satırlar row koleksiyonuna ait DataRow , sütunlar colomns koleksiyonuna ait DataColumn nesneleri ile tutulur.

DataTable, sistem hafızasında tutulduğu için hızlıdır.
.xml alt yapısını kullanır, dolayısıyla WebService leri için birebirdir.
  
 
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));

dt.Rows.Add(1, "Eileen");
dt.Rows.Add(2, "Su");
    
foreach (DataRow item in dt.Rows)
{
    Response.Write(item["ID"].ToString() + item["Name"]); 
} 

Koleksiyonlar

Nesneleri grupalamaya yarayan sınıflardır. Kolleksiyonlar her türlü nesneyi tutabilir ve boyutları sabit değildir.

Kolleksiyonlar Arraysler gibidir. Ama daha esnektir,farklı türdeki nesneleri aynı grup içinde tutabilir,erişebilmek için foreach döngüsünü kullanabilirler.

ArrayList, SortedList, HashTable, BitArray, Stack,Queue gibi.

Kolleksiyonlara foreach ile ulaşabilmemizi sağlayan interfaceler vardır.Örnek Interfaceler;

IEnumarable Interface : Numaratör olarak tanımlanabilir, koleksiyon sınıfları içinde foreach ile gezinmemizi sağlayan arabirimdir.

IEnumarator Interface : Koleksiyondaki her bir elemana erişmemizi sağlayan arayüzdür. MoveNext() ve Reset() isminde iki metotu vardır

ICollection Interface : Bütün koleksiyon sınıflarının desteklediği arabirimdir.. IEnumarable arayüzünden inheritence almıştır.

IList Interface : Koleksiyon içindeki elemanlara indeksleri ile erişmeyi sağlayan arayüzdür. ICollection ve IEnumarable arayüzlerinden türemiştir. Remove() , Add() , Insert(), RemoveAt(), Clear(), Contains(), IndexOf gibi metotları IsFixedSize, IsReadOnly gibi özellikleri vardır.

IComparer Interface : Bu arayüz ile iki nesnenin ne şekilde karşılaştırılacağı uygulanabilir


List<int> myList = new List<int>();
myList.Add(3);
myList.Add(4); 
int total = 0;
foreach(int val in myList)
{
    total = total + val;
}
Console.WriteLine("Toplam : {0}", total);


Dictionary<string, int> numbers = new Dictionary<string, int>();
numbers["Bora"] = 862842;
numbers["Fuat"] = 951753;
numbers["Erçin"] = 123654;
foreach (KeyValuePair<string, int> entry in numbers)
Console.WriteLine(entry.Key + ":" + entry.Value);




Generic Koleksiyonlar

System.Collections.Generics namespace’i sayesinde kullanılabilir.
İçindeki sınıf-metodlardan yararlanabilmek için sadece koleksiyonun tipini belirtip parametre olarak geçmek yeterlidir.

        List<int> myList = new List<int>();
        myList.Add(3);
        <> içerisinde int tipini parametre olarak girip generic List değişken (instance )’i oluşturuyoruz.
    

.Net içerisinde bulunan koleksiyonlar aşağıdaki gibidir.

Generic ClassAçıklamaGeneric Olmayan Karşılığı
Collection<T>
ICollection<T>
base sınıf desteği sağlar. CollectionBase
ICollection
IEnumerable<T>
IEnumerator<T>
Foreach kullanarak iterasyon sağlarIEnumerable
IEnumerator
List<T>
IList<T>
Dizi (array) boyutunun dinamik olarak arttığı durumlarda IList<T> interface'i ile genişletme ihtiyacı olan durumları temsil eder.
ArrayList
IList
Genericslerin avantajı : Kod tekrarını önler, gereksiz Cast ve Boxing-Unboxing kullanmasını önler, kaliteli ve daha yönetilebilir kod yazmamıza olanak sağlar.
02.02.2020