$1.99 Domains* at GoDaddy.com

C# ile Hashtable Koleksiyon Sınıfının Kullanımı

c-ders-117HashTable koleksiyon sınıfını incelemeye çalışacağız. BildiÄŸiniz gibi Koleksiyonlar System.Collections namespace’inde yer almakta olup, birbirlerinin aynı veya birbirlerinden farklı veri tiplerinin bir arada tutulmasını saÄŸlayan diziler oluÅŸturmamıza imkan saÄŸlamaktadırlar. Pek çok koleksiyon sınıfı vardır. Bugün bu koleksiyon sınıflarından birisi olan HashTable koleksiyon sınıfını inceleyeceÄŸiz.

HashTable koleksiyon sınıfında veriler key-value dediÄŸimiz anahtar-deÄŸer çiftleri ÅŸeklinde tutulmaktadırlar. Tüm koleksiyon sınıflarının ortak özelliÄŸi barındırdıkları verileri object tipinde olmalarıdır. Bu nedenle, HashTable’lardada key ve value deÄŸerleri herhangibir veri tipinde olabilirler. Temel olarak bunların her biri birer DictionaryEntry nesnesidir. BahsetmiÅŸ olduÄŸumuz key-value çiftleri hash tablosu adı verilen bir tabloda saklanırlar. Bu deÄŸer çiftlerine eriÅŸmek için kullanılan bir takım karmaşık kodlar vardır.

Key değerleri tektir ve değiştirilemezler. Yani bir key-value çiftini koleksiyonumuza eklediğimizde, bu değer çiftinin value değerini değiştirebilirken, key değerini değiştiremeyiz. Ayrıca key değerleri benzersiz olduklarında tam anlamıyla birer anahtar alan vazifesi görürler. Diğer yandan value değerline null değerler atayabilirken, anahtar alan niteliğindeki Key değerlerine null değerler atayamayız. Şayet uygulamamızda varolan bir Key değerini eklemek istersek ArgumentException istisnası ile karşılaşırız.

HashTable koleksiyonu verilere hızı bir biçimde ulaÅŸmamızı saÄŸlayan bir kodlama yapısına sahiptir. Bu nedenle özellikle arama maliyetlerini düşürdüğü için tercih edilmektedir. Åžimdi konuyu daha iyi pekiÅŸtirebilmek amacıyla, hemen basit bir uygulama geliÅŸtirelim. Uygulamamızda, bir HastTable koleksiyonuna key-value çiftleri ekliyecek, belirtilen key’in sahip olduÄŸu deÄŸere bakılacak, tüm HashTable’ın içerdiÄŸi key-value çiftleri listelenecek, eleman çiftlerini HashTable’dan çıkartacak vb… iÅŸlemler gerçekleÅŸtireceÄŸiz. Form tasarımını ben aÅŸağıdaki ÅŸekildeki gibi yaptım. Temel olarak teknik terimlerin türkçe karşılığına dair minik bir sözüğü bir HashTable olarak tasarlayacağız.

c-hashtable-1
Şekil 1. Form Tasarımımız.

Şimdi kodlarımıza bir göz atalım.

System.Collections.Hashtable htTeknikSozluk; /* HashTable koleksiyon nesnemizi tanimliyoruz.*/

private void Form1_Load(object sender, System.EventArgs e)
{
     htTeknikSozluk=new System.Collections.Hashtable();
/* HashTable nesnemizi olusturuyoruz.*/
    stbDurum.Text=htTeknikSozluk.Count.ToString();
/* HashTable’imizdaki eleman sayisini Count özelligi ile ögreniyoruz.*/
}

private void btnEkle_Click(object sender, System.EventArgs e)
{
    
try
    
{
        
htTeknikSozluk.Add(txtKey.Text,txtValue.Text);/* HashTable’imiza key-value çifti ekleyebilmek için Add metodu kullaniliyor.*/
        lstAnahtar.Items.Add(txtKey.Text);
        stbDurum.Text=htTeknikSozluk.Count.ToString();
    
}
    catch(System.ArgumentException)
/* Eger var olan bir key’i tekrar eklemeye çalisirsak bu durumda ArgumentException istisnasi     firlatilacaktir. Bu durumda, belirtilen key-value çifti HashTable koleksiyonuna eklenmez. Bu durumu kullaniciya bildiriyoruz.*/
    {
        
stbDurum.Text=txtKey.Text+” Zaten HashTable Koleksiyonunda Mevcut!”;
    }
}

private void lstAnahtar_DoubleClick(object sender, System.EventArgs e)
{
    string deger;

    deger=htTeknikSozluk[lstAnahtar.SelectedItem.ToString()].ToString(); /* HashTable’daki bir degere ulasmak için, köseli parantezler arasinda aranacak key degerini giriyoruz. Sonucu bir string degiskenine aktariyoruz.*/

    MessageBox.Show(deger,lstAnahtar.SelectedItem.ToString());
}

private void btnSil_Click(object sender, System.EventArgs e)
{
    if(htTeknikSozluk.Count==0) 
    {
        stbDurum.Text=”Çikartilabilecek hiç bir eleman yok”;
    
}
    else if(lstAnahtar.SelectedIndex==-1)
    {
        stbDurum.Text=”Listeden bir eleman seçmelisiniz”;
    }
    else
    {
        
htTeknikSozluk.Remove(lstAnahtar.SelectedItem.ToString()); /* Bir HashTable’dan bir nesneyi çikartmak için, Remove metodu kullanilir. Bu metod parametre olarak çikartilmak istenen deger çiftinin key degerini alir.*/

        lstAnahtar.Items.Remove(lstAnahtar.SelectedItem);

        stbDurum.Text=”Çikartildi”;

        stbDurum.Text=htTeknikSozluk.Count.ToString();
    
}
}

private void btnTumu_Click(object sender, System.EventArgs e)
{

    lstTumListe.Items.Clear(); /* Asagidaki satirlarda, bir HashTable koleksiyonu içinde yer alan tüm elemanlara nasil erisildigini görmekteyiz. Keys metodu ile HashTable koleksiyonumuzda yer alan tüm anahtar degerlerini (key’leri), ICollection arayüzü(interface) türünden bir nesneye atiyoruz. Foreach döngümüz ile bu nesne içindeki her bir anahtari, HashTable koleksiyonunda bulabiliyoruz.*/

    ICollection anahtar=htTeknikSozluk.Keys; foreach(string a in anahtar)
    {
        lstTumListe.Items.Add(a+”=”+htTeknikSozluk[a].ToString());
    
}
}

Şimdi uygulamamızı çalıştıralım.

c-hashtable-2
Şekil 2. Programın Çalışmasnının sonucu.

Geldik bir makalemizin daha sonuna. 

Kategoriler: C# Programlama, Yazılım

Tags: , , ,

Yorumlar

Yorum Yok

Yorumunuzu Ekleyin

Yorum eklemek için giris yapmalısınız.