duyuruElektroArge.com'a Hoşgeldiniz. Üye Olmak İçin Tıklayın. duyuru





houseForum ana sayfa   iletişimİletişim   bilgiSSS  
kırmızı yeşil mavi
ekleKayıt  anahtarGiriş
evForum ana sayfa goE-Kütüphane goE-Ders goC#
 

  • Reklam

Ders 43 - Generic Classlar - List

C Dili Dersleri - Okan Bilke

Ders 43 - Generic Classlar - List

Mesajgönderen okanbilke » 11 Kas 2015 03:11

List Generic Class değişkeni, diğer koleksiyon değişkenleriyle benzer mantığa sahip olmakla beraber extra daha gelişmiş özelliklere de sahiptir. Özellikle bu konu üzerinde biraz kafa yormak istiyorum. Sebebi basit, linq yapısı koleksiyonlar içerisinde list ile çok iç içe kullanılabilmektedir. Dikkatlice takip edelim.
using System.Collections.Generic;  // Ekleyin
private void button1_Click(object sender, EventArgs e)
{
String[] DiziElemanlari = { "ANKARA", "BOLU", "AYDIN" };
List<String> YeniListe = new List<string>();
YeniListe.AddRange(DiziElemanlari);

this.Text = YeniListe[1]; // BOLU yazar
}

Dilerseniz aşağıdaki şekilde tüm elemanları öğrenebilirsiniz.
using System.Collections;   // Ekleyin
using System.Collections.Generic; // Ekleyin
private void button1_Click(object sender, EventArgs e)
{
String[] DiziElemanlari = { "ANKARA", "BOLU", "AYDIN" };
List<String> YeniListe = new List<string>();
YeniListe.AddRange(DiziElemanlari);

IEnumerator DiziOku = YeniListe.GetEnumerator();
while(DiziOku.MoveNext())
{
string Deger = DiziOku.Current.ToString();
MessageBox.Show(Deger);
}
}

Yukarıdaki kodlama sayesinde "DiziElemanlari" isimli değişkene ait tüm değerleri mesaj olarak kullanıcının görmesini sağlayabilirsiniz.

Aggregate
Bu method sayesinde listeye depolanan elemanlara istediğiniz işlemi yapabilirsiniz. Elde edeceğiniz sonuç tek bir değer olarak sizlere dönecektir. Öncelikle aşağıdaki örneği dikkatlice incelemenizi istiyorum.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 20, 35, 15, 75, 80, 30, 125, -25, 100 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);
int Toplam = 0;
foreach(int Eleman in YeniListe)
{
Toplam += Eleman;
}
this.Text = Toplam.ToString();
}

Muhtemelen önceki konuları karıştırdıysanız yapılan işlemi anlamış olmalısınız. Burada listeye eklenen elemanların toplamını hesapladık.
Şimdi aynı örneği incelemesini yaptığımız fonksiyon ile gerçekleştirelim. Sonuç aynı olacaktır.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 20, 35, 15, 75, 80, 30, 125, -25, 100 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);
//
int Toplam = YeniListe.Aggregate(delegate(int Top, int Deg)
{
return Top+Deg;
});
this.Text = Toplam.ToString();
}

Bu örnek için delegate ifadesinden faydalanılmıştır. Aslında doğru olan budur fakat dilerseniz aşağıdaki şekilde fonksiyonu başka bir yerde tanımlayıp sadece ismini ifadeye girebilirsiniz. Sonuç aynı olacaktır.
private int ToplamBul(int Top, int Deg)
{
return Top + Deg;
}
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 20, 35, 15, 75, 80, 30, 125, -25, 100 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);
//
int Toplam = YeniListe.Aggregate(ToplamBul); // Fonksiyon Adı
this.Text = Toplam.ToString();
}

Bu uygulama için şayet 50 den büyük olanları toplatmak isterseniz o zaman kodunuzu aşağıdaki şekilde düzenlemelisiniz.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 20, 35, 15, 75, 80, 30, 125, -25, 100 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);
//
int Toplam = YeniListe.Aggregate(delegate(int Top, int Deg)
{
if (Deg >= 50)
{
Top += Deg;
}
return Top;
});
this.Text = Toplam.ToString();
}

Dilerseniz aynı işlemi Lambda(=>) karakterini kullanarakta yapabilirsiniz. Aşağıdaki kodlama bu husus göstermektedir.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 20, 35, 15, 75, 80, 30, 125, -25, 100 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);
//
int Toplam = YeniListe.Aggregate((int Top, int Deg) =>
{
if (Deg >= 50)
{
Top += Deg;
}
return Top;
});
this.Text = Toplam.ToString();
}

ConvertAll
Bu method kullanılarak koleksiyon içerisindeki tüm elemanlar istenen bir tipe dönüştürülerek kolayca elde edilebilir. Aşağıdaki örnek uygulamadaki para miktarları formatlı şekilde string tipe dönüştürülerek listeye aktarılmaktadır.
private void button1_Click(object sender, EventArgs e)
{
double[] DiziElemanlari = { 20, 35, 15, 75, 80, 30, 125, -25, 100 };
List<double> YeniListe = new List<double>();
YeniListe.AddRange(DiziElemanlari);
List<string> ParaMiktari = YeniListe.ConvertAll(delegate(double Deger)
{
return Deger.ToString("#,##.00 TL");
});
ParaMiktari.ForEach(delegate(string Eleman)
{
listBox1.Items.Add(Eleman);
});
}

Uygulamayı çalıştırdığınızda ekran görüntüsü şu şekilde olacaktır:
Resim

All
Bu methodu kullanarak koleksiyon içerisindeki tüm elemanların belli bir koşula uyup uymadığını kontrol edebilirsiniz. Aşağıdaki örnek uygulamada listede yer alan değerlerin "100"den büyük olup olmadıklarını kontrol ediyoruz. Dikkat edin elemanların bir tanesi bile "100"den küçük ise sonuç "false" olacaktır.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 120, 130, 150, 75 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);
bool hepsi = YeniListe.All(delegate(int Deg)
{
if (Deg > 100)
{
return true;
}
else
{
return false;
}
});
if(hepsi)
{
this.Text = "Hepsi 100 den Büyük";
}
else
{
this.Text = "Hepsi 100 den Büyük Değil";
}
}

Bu örnek için dizide yer alan "75" değeri "100" den küçük olduğundan hepsi isimli değişken false değerini alacaktır. Şayet "75" değerini "100"den büyük yaparsanız o zaman true değerini alacaktır. Doğaldır ki başlıkta yazan metin de ona göre değişecektir.

Any
All ile aynı mantığa sahip olmakla beraber koleksiyondaki değerlerin bir tanesi bile koşulu sağlıyorsa true döndürür. Aşağıdaki örnekte öğrencilerin notları kontrol edilerek kalan öğrencinin olup olmadığı kontrol edilmektedir. Notlardan biri "40" olduğu için true değeri dönecektir.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 70, 40, 80, 75 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);
bool hepsi = YeniListe.Any(delegate(int Deg)
{
if (Deg < 50)
{
return true;
}
else
{
return false;
}
});
if(hepsi)
{
this.Text = "Sınıfta Kalan Öğrenci Var";
}
else
{
this.Text = "Tüm Öğrenciler Geçti";
}
}

AsEnumerable
Bu methodu kullanarak koleksiyon içerisindeki tüm elemanlara erişebilirsiniz. Bunun yanında dilerseniz koleksiyonda belirli koşullara uyan değerleride elde edebilirsiniz. Aşağıdaki uygulama "100" den büyük girilen notları göstermektedir.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 70, 40, 80, 75 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);
IEnumerable<int> GecenNotlar = YeniListe.AsEnumerable().Where(Deg => Deg > 100); // 100 den büyük notları al
IEnumerator<int> Oku = GecenNotlar.GetEnumerator();
while(Oku.MoveNext())
{
listBox1.Items.Add(Oku.Current.ToString());
}
}

Resim

Aşağıdaki şekilde bir kodlama ilede "&&" (and) operatörünü kullanarak 50-100 arasında notu olanları kolayca görebilirsiniz.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 120, 130, 150, 75 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);

IEnumerable<int> GecenNotlar = YeniListe.AsEnumerable().Where(Deg => Deg > 50 && Deg <= 100); // 50 - 100 arası notlar
IEnumerator<int> Oku = GecenNotlar.GetEnumerator();
while(Oku.MoveNext())
{
listBox1.Items.Add(Oku.Current.ToString());
}
}

Örneğe dikkat edecek olursanız Where SQL komutu kullanılarak içerisinde C# operatörü olan "&&" sayesinde istenilen koşul kolayca konulabilmektedir. Burada belirtmekte yarar görüyorum, kullanılan operatörler sadece bunlarla sınırlı değildir. İleriki derslerimizde göreceğimiz Linq bölümünde neredeyse tamamı çok detaylı olarak ele alınacaktır.

AsQueryable
Kullanım olarak AsEnumerable metoduna benzer aşağıda komut örneklendirilmiştir.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 120, 130, 150, 75 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);

IEnumerable<int> GecenNotlar = YeniListe.AsQueryable().Where(Deg => Deg < 0 || Deg > 100); // Yanlış notları al
IEnumerator<int> Oku = GecenNotlar.GetEnumerator();
while(Oku.MoveNext())
{
listBox1.Items.Add(Oku.Current.ToString());
}
}

Yine belirtmekte yarar görüyorum. Öncekinden farklı olması bağlamında bu sefer operatör olarak "||" (or) kullanılmıştır. Siz her iki metod da da dilediğinizi kullanabilirsiniz. Hatta çok daha gelişmiş koşulları türetip bildirebilirsiniz.

Average
Koleksiyona ait elemanların ortalamasını tek seferde hesaplayabilen methoddur. Bu sayede yazmamız gereken bir çok algoritmik ifadeden kurtulabilirsiniz.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 80, 10, 95, 75 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);

double Ortalama = YeniListe.Average();
this.Text = "Not Ortalaması" + Ortalama.ToString();
}

Cast
Koleksiyondaki değerlerinizi dilediğiniz bir tipe dönüştürüp kullanmak isterseniz bu metod işinizi fazlasıyla görecektir.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 80, 10, 95, 75 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);

IEnumerable<string> Metin = YeniListe.Cast<string>();
IEnumerator<string> Oku = Metin.GetEnumerator();
while(Oku.MoveNext())
{
listBox1.Items.Add(Oku.Current); // String dönüşümü yok
}
}

Clear
Listede yer alan elemanları temizlemek için kullanılan metottur.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 80, 10, 95, 75 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);
YeniListe.Clear(); // Temizle
}

Concat
İki farklı (veya daha fazla) koleksiyonu tek bir koleksiyon içerisinde toplamak için kullanılan metottur. Komutu anlamak için aşağıdaki örnek uygulamayı dikkatlice inceleyiniz.
private void button1_Click(object sender, EventArgs e)
{
string[] DiziElemanlari = { "ANKARA", "ADANA", "BOLU", "CEYHAN", "BURSA" };
string[] Dizi = { "1", "2" };
List<string> YeniListe = new List<string>();
YeniListe.AddRange(DiziElemanlari);

List<string> YeniListe2 = new List<string>();
YeniListe2.AddRange(Dizi);

IEnumerable<string> SonucDizi = YeniListe.Concat(YeniListe2);
IEnumerator<string> Oku = SonucDizi.GetEnumerator();
while(Oku.MoveNext())
{
listBox1.Items.Add(Oku.Current);
}
}

Distinct
Koleksiyonda birden fazla yer alan elemanları tek bir sefer elde etmek için kullanılan metottur.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 80, 10, 95, 75, 10, 90 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);

IEnumerable<int> SonucDizi = YeniListe.Distinct();
IEnumerator<int> Oku = SonucDizi.GetEnumerator();
while(Oku.MoveNext())
{
listBox1.Items.Add(Oku.Current.ToString());
}
}

Örneğe dikkat edin sonuç çıktıda "10" değeri sadece bir kere yazdırılacaktır.

ElementAt
Koleksiyonda parametreyle belirtilen sıradaki elemanın değerini öğrenmek için kullanılan metottur.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 80, 10, 95, 75, 10, 90 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);

int Deger = YeniListe.ElementAt(2); // Üçüncü Eleman
this.Text = Deger.ToString(); // 95 Yazar
}

Except
Birinci koleksiyonda bulunup ikinci koleksiyonda bulunmayan elemanları belirleyen metottur. Aşağıdaki örnek uygulamada ikinci koleksiyonda yer alan "80" ile "10" değerinin sonuç koleksiyonda yer alamadığına dikkat ediniz.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 80, 10, 95, 75, 10, 90 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);

int[] DiziElemanlari2 = { 80, 10 };
List<int> YeniListe2 = new List<int>();
YeniListe2.AddRange(DiziElemanlari2);

IEnumerable<int> Farklar = YeniListe.Except(YeniListe2);
IEnumerator<int> Oku = Farklar.GetEnumerator();
while(Oku.MoveNext())
{
listBox1.Items.Add(Oku.Current.ToString());
}
}

First
Koleksiyona ait ilk elemanın değerini öğrenmek için kullanılan metottur.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 80, 10, 95, 75, 10, 90 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);

int IlkEleman = YeniListe.First(); // İlk eleman 80
this.Text = "Koleksiyonun İlk Elemanı=" + IlkEleman.ToString();
}

GroupBy
Koleksiyon içerisindeki elemanları, aynen sql sorgusundaki Group By gibi gruplandırmak amaçlı kullanılan çok kullanışlı bir komuttur. Komutu anlayabilmek için kullanıcı tanımlı bir sınıf oluşturmayı unutmayın. İçerisinde dilediğiniz kadar özellik oluşturabilirsiniz.
class Personeller
{
public string Ad { get; set; }
public int Yas { get; set; }
}
private void button1_Click(object sender, EventArgs e)
{
Personeller[] Yeni = new Personeller[3]; // Dizi Class
Yeni[0] = new Personeller();
Yeni[0].Ad = "Okan";
Yeni[0].Yas = 24;

Yeni[1] = new Personeller();
Yeni[1].Ad = "Göksu";
Yeni[1].Yas = 24;

Yeni[2] = new Personeller();
Yeni[2].Ad = "Onur";
Yeni[2].Yas = 30;

List<Personeller> YeniListe = new List<Personeller>();
YeniListe.AddRange(Yeni);

IEnumerable<IGrouping<int, string>> Sonuc = YeniListe.GroupBy(Deg => Deg.Yas, Deg => Deg.Ad);
foreach(IGrouping<int,string> Eleman in Sonuc)
{
listBox1.Items.Add(Eleman.Key.ToString() + " Yaşındaki Personel");
foreach(string Ad in Eleman)
{
listBox1.Items.Add("---" + Ad);
}
}
}

Resim

Dikkat edin yaşı aynı olan personel içte kalacak şekilde gruplandırılarak yazılmıştır.

GroupJoin
Birden fazla koleksiyon olması durumunda ilk koleksiyondaki bir değerden, diğer koleksiyona ait ilişkisel verileri toplamak için kullanılan komuttur.
Resim

class Egitmen
{
public string Ad { get; set; }
}
class Dersler
{
private Egitmen Deger = new Egitmen();
public string DersAd { get; set; }

public Egitmen Hoca
{
get
{
return Deger;
}
set
{
Deger = value;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
Egitmen[] Egt = new Egitmen[3];
Egt[0] = new Egitmen();
Egt[0].Ad = "Okan Bilke";

Egt[1] = new Egitmen();
Egt[1].Ad = "Göksu Bilke";

Egt[2] = new Egitmen();
Egt[2].Ad = "Onur Bilke";

Dersler[] Ders = new Dersler[4];
Ders[0] = new Dersler();
Ders[0].DersAd = "C#";
Ders[0].Hoca.Ad = "Okan Bilke";

Ders[1] = new Dersler();
Ders[1].DersAd = "VB";
Ders[1].Hoca.Ad = "Onur Bilke";

Ders[2] = new Dersler();
Ders[2].DersAd = "Excel";
Ders[2].Hoca.Ad = "Göksu Bilke";

Ders[3] = new Dersler();
Ders[3].DersAd = "SQL Server";
Ders[3].Hoca.Ad = "Mustafa Bilke";

List<Egitmen> EgitmenListe = new List<Egitmen>();
EgitmenListe.AddRange(Egt);
List<Dersler> DersListe = new List<Dersler>();
DersListe.AddRange(Ders);

var Sonuc = EgitmenListe.GroupJoin(DersListe, x => x, Deg => Deg.Hoca, (x, Degler) =>
new
{
Hc = x.Ad,
Dersler = Degler.Select(Deg => Deg.Hoca.Ad)
});

foreach(var Eleman in Sonuc)
{
listBox1.Items.Add(Eleman.Hc);
foreach(var Degerim in Eleman.Hc)
{
listBox1.Items.Add("----" + Degerim);
}
}
}

GroupJoin komutunu linq derslerimizde daha detaylı olarak anlatacağız. Şimdilik örneği anlasak yeter.

Last
Bu methodu kullanarak koleksiyonda yer alan en son elemanı kolayca öğrenebilirsiniz.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 80, 10, 95, 75, 10, 90 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);
int IlkEleman = YeniListe.Last(); // Son Eleman 90
this.Text = "Koleksiyonun İlk Elemanı=" + IlkEleman.ToString();
}

Max
Bu metot sayesinde koleksiyonda yer alan en büyük elemanı hesaplayabilirsiniz.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 80, 10, 95, 75, 10, 90 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);
int MaxEleman = YeniListe.Max(); // 95
this.Text = "Koleksiyonun En Büyük Elemanı=" + MaxEleman.ToString();
}

Min
Bu metot sayesinde koleksiyonda yer alan en küçük elemanı hesaplayabilirsiniz.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 80, 10, 95, 75, 10, 90 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);
int MinEleman = YeniListe.Min(); // 10
this.Text = "Koleksiyonun En Küçük Elemanı=" + MinEleman.ToString();
}

OrderBy
Koleksiyona ait elemanları sıralamak için kullanılan metottur. Aşağıdaki kodlamaya dikkat ediniz.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 80, 10, 95, 75, 10, 90 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);
IEnumerable<int> SiraliHal = YeniListe.OrderBy(Deg => Deg);
IEnumerator<int> Oku = SiraliHal.GetEnumerator();
while(Oku.MoveNext())
{
listBox1.Items.Add(Oku.Current.ToString());
}
}

Skip
Koleksiyon değerlerinde işlem yaparken bazı durumlarda en alt veya en üstten belirli değerler atılarak sonuç hesaplanır. Bu komut ile atılacak olan değerleri belirleyebilirsiniz.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 80, 10, 95, 75, 10, 90 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);
IEnumerable<int> sonuc = YeniListe.OrderByDescending(deg => deg).Skip(2);
foreach(int Eleman in sonuc)
{
listBox1.Items.Add(Eleman.ToString());
}
}

Örnek uygulama için değerler tersten sıralatılarak "95" ve "90" değerleri listeye aktarılmamıştır.

SkipWhile
Skip metodunda sayı belirtiyorduk. Şayet bir koşula bağlı değerler dikkate alınmayacaksa o zaman bu komutu kullanmalısınız.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 80, 10, 95, 75, 10, 90 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);
IEnumerable<int> Sonuc = YeniListe.OrderByDescending(Deg => Deg).SkipWhile(Deg => Deg < 15); // Bu sefer koşul var
foreach(int Eleman in Sonuc)
{
listBox1.Items.Add(Eleman.ToString());
}
}

Sum
Koleksiyona ait elemanların toplamını hesaplayan metottur.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 80, 10, 95, 75, 10, 90 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);

int Sonuc = YeniListe.Sum();
this.Text = Sonuc.ToString();
}

Take
Parametre ile girilen adet kadar koleksiyon elemanını listeden söküp almak için kullanılan metottur.
private void button1_Click(object sender, EventArgs e)
{
int[] DiziElemanlari = { 80, 10, 95, 75, 10, 90 };
List<int> YeniListe = new List<int>();
YeniListe.AddRange(DiziElemanlari);

IEnumerable<int> Sonuc = YeniListe.OrderByDescending(Deg => Deg).Take(2); // Üstten 2 tanesini Al

foreach(int Eleman in Sonuc)
{
listBox1.Items.Add(Eleman.ToString());
}
}

[align=center]ToArray

Bu komut kullanılarak koleksiyon içerisindeki elemanlar istenilen başka bir dizi değişkene kolayca aktarılabilir. Aşağıdaki örnek uygulamada koleksiyondaki elemanların sadece adları yeni dizi değişkene aktarılmaktadır.
class Hocalar
{
public String Ad { get; set; }
public int Yas { get; set; }
}
private void button1_Click(object sender, EventArgs e)
{
List<Hocalar> YeniListe = new List<Hocalar>
{
new Hocalar { Ad = "Okan" , Yas = 24 },
new Hocalar { Ad = "Göksu" , Yas = 20 },
new Hocalar { Ad = "Onur" , Yas = 30 },
new Hocalar { Ad = "Mustafa", Yas = 58 }
};
string[] Adlar = YeniListe.Select(Deg => Deg.Ad).ToArray();

foreach(string Eleman in Adlar)
{
listBox1.Items.Add(Eleman); // Sadece Adları Yaz
}
}

Resim

ToDictionary
Elinizde yer alan koleksiyonu Dictionary generic sınıfına aktarıp özelliklerini kullanmak isterseniz bu metodu kullanmak durumundasınız. Dikkat edin lambda operatörü key olan özelliği belirleyecektir.
class Hocalar
{
public String Ad { get; set; }
public int Yas { get; set; }
public Double TCNo { get; set; }
}
private void button1_Click(object sender, EventArgs e)
{
List<Hocalar> YeniListe = new List<Hocalar>
{
new Hocalar { Ad = "Okan" , Yas = 24 , TCNo = 12345 },
new Hocalar { Ad = "Göksu" , Yas = 20 , TCNo = 67890 },
new Hocalar { Ad = "Onur" , Yas = 30 , TCNo = 19875 },
new Hocalar { Ad = "Mustafa", Yas = 58 , TCNo = 18810 }
};
Dictionary<double, Hocalar> Liste = YeniListe.ToDictionary(Deg => Deg.TCNo); // Bu Key Olacak

foreach(KeyValuePair<Double,Hocalar> Eleman in Liste)
{
listBox1.Items.Add(Eleman.Key.ToString());
listBox1.Items.Add("---" + Eleman.Value.Ad);
listBox1.Items.Add("---" + Eleman.Value.Yas.ToString());
}
}

Yukarıdaki kodlamadan sonra ekran görüntüsü şu şekilde oluşacaktır.
Resim

Union
Birden fazla koleksiyonu elemanlarını tek bir koleksiyonda toplamak için kullanılan metottur. Aşağıdaki örnek uygulamada sonuç koleksiyon 4 elemandan oluşacaktır.
private void button1_Click(object sender, EventArgs e)
{
string[] Dizi = { "A", "B" };
string[] Dizi2 = { "a", "b" };
List<string> Liste = Dizi.ToList();
List<string> Liste2 = Dizi2.ToList();

IEnumerable<string> Birlestir = Dizi.Union(Dizi2); // Birleştir
foreach(String Eleman in Birlestir)
{
listBox1.Items.Add(Eleman);
}
}

Where
Koleksiyon elemanlarını belli bir koşula tabi tutup filtrelemek isterseniz bu komuttan faydalanmalısınız. Aşağıdaki örnek uygulamada koleksiyonda yer alan şehirlerin ilk harfi "A" olanları başka bir listeye aktarılmaktadır.
private void button1_Click(object sender, EventArgs e)
{
string[] Dizi = { "Ankara", "Adana", "Bolu", "Van", "Rize" };
List<string> Liste = Dizi.ToList();


IEnumerable<string> Sonuc = Liste.Where(Deg => Deg.Substring(0, 1) == "A"); // İlk harfi A olanlar
foreach(String Eleman in Sonuc)
{
listBox1.Items.Add(Eleman); // Ankara ve Adana Yazar
}
}
okanbilke@gmail.com
Kullanıcı avatarı
okanbilke
Site Kurucusu
Site Kurucusu
 
Mesajlar: 721
Beğendiklerim: 0 mesaj
Beğenilenlerim: 0 mesaj
Kayıt: 15 Mar 2013 13:09
Konum: Ankara

Reklam

Dön C#

Kimler çevrimiçi

Bu forumu gezen kullanıcılar: Hiç bir kayıtlı kullanıcı yok ve 1 misafir


  • Reklam