C# Hashtable Kullanımı

Kruvazör

Ar-Ge Ekibi Lideri
28 Mar 2020
1,744
2,561
Wrong Side Of Heaven


Herkese merhaba arkadaşlar bugün sizinle C# üzerinde HashTable kullanımını konuşacağız.

C# – Diziler ve koleksiyonlar” başlıklı yazımda koleksiyonların avantajlarından, dezavantajlarından bahsedip, genel bilgi vermiştim. Bu yazımda ise bir koleksiyon sınıfı olan Hashtable‘dan bahsedeceğiz.

Öncelikle Hashtable non-generic bir koleksiyon türüdür.

4vs6q4u.png



Dizilerde elemanlar, belleğe sıralı bir şekilde yerleştirilmektedir. Sıfırdan başlanarak her bir elemana birer indeks değeri verilip, elemanlara o indeksler aracılığıyla erişmemiz sağlanmaktaydı.

ak304n5.jpg



Hashtable koleksiyonunda ise Anahtar(Key) ve Değer(Value) olmak üzere iki kavram karşımıza çıkmakta.
Bunu diziler üzerinden şöyle örneklendirebilirim;
eklediğimiz elemanlar
(değer), o elemanlara erişmek için kullandığımız indeksleri de (anahtar) olarak düşünebilirsiniz.

Her bir Değerin farklı bir Anahtarı olmalıdır
yani koleksiyon içerisinde yer alan Anahtarlar birbirinden farklı olmalıdır.
şimdi HashTable'ı örneklerle pekiştirelim


En başta bu şekilde Hashtable'ı oluşturalım
C#:
  Hashtable ht = new Hashtable();


Bu şekilde anahtar ve değerlerimizi ekliyoruz
C#:
 //  Add(Eklenecek_Anahtar, Eklenecek_Deger) Metodu

            ht.Add("KaptanTR", 1415);     

            ht.Add("'CaptainKanka", 1072);

            ht.Add("Coderx37", 198);

            ht.Add("M R X", 1101);

            ht.Add("'Adige", 9331);

DEĞER SORGULAMA
C#:
             //ContainsKey(Aranan_Anahtar) Metodu

            // Koleksiyon içerisinde, parametre olarak girilen değerde bir Anahtar(Key) mevcutsa TRUE  değilse FALSE döndürecektir.

            if (ht.ContainsKey("Coderx37"))
                Console.WriteLine(ht["Coderx37"]);

            else
                Console.WriteLine("kullanıcı Bulunamadı.");

            //  ContainsValue(Aranan_Deger) Metodu
            // Koleksiyon içerisinde, parametre olarak girilen ifadede bir Değer(Value) mevcutsa TRUE  değilse FALSE döndürecektir.


            if (ht.ContainsValue(1415))
                Console.WriteLine("KaptanTR"+"\n---------------------");
            else
                Console.WriteLine("kullanıcı bulunamadı.");

TEMİZLEME FONKSİYONLARI
C#:
ht.Clear();  // tamamını temizleme fonksiyonu

          
ht.Remove("'CaptainKanka");    //Koleksiyon içerisinde, parametre olarak girilen değerde bir Anahtar(Key) mevcutsa;
                                                                // Anahtarı ve anahtarla ilişkili Değeri silecektir.
                                                               //captainKanka hocam kusura bakmasın :)

DEĞERLERİ VE ANAHTARLARI EKRANA YAZDIRMA
C#:
  // Anahtarları(Keys) içeren bir koleksiyon döndürmektedir.
            ArrayList arrayList = new ArrayList(ht.Keys);
            foreach (object Anahtar in arrayList)
            {
                Console.WriteLine(Anahtar+"\n----------");
            }

            // değerli(values) içeren bir koleksiyon döndürmektedir.
            ArrayList arrayList1 = new ArrayList(ht.Values);
            foreach (object Deger in arrayList1)
            {
                Console.WriteLine(Deger+"\n --------");
            }

ANAHTAR-DEĞER ÇİFTLERİNİN SAYISINI DÖNDÜRME
C#:
            //Count Özelliği
            //Koleksiyon içerisinde bulunan anahtar-değer çiftlerinin sayısını döndürmektedir.
             Console.WriteLine(ht.Count);


OKUDUĞUNUZ İÇİN TEŞEKKÜR EDERİM.
 

Kruvazör

Ar-Ge Ekibi Lideri
28 Mar 2020
1,744
2,561
Wrong Side Of Heaven

N S

Uzman üye
19 Haz 2013
1,139
208
Hocam eline sağlık, yıllardır c#yazıyorum hiç kullanmadım, KeyValuePair ' den farkı nedir ?
 

Kruvazör

Ar-Ge Ekibi Lideri
28 Mar 2020
1,744
2,561
Wrong Side Of Heaven
Hocam eline sağlık, yıllardır c#yazıyorum hiç kullanmadım, KeyValuePair ' den farkı nedir ?
teşekkür ederim hocam,
HashTable ve KeyValuePair arasındaki farklardan bir tanesi KeyValuePair generictir fakat HashTable non generictir
Generic yapılar boxing-unboxing ve Type Safe kavramlarını önemser fakat non genericlerde böyle bir olay yoktur (bu da sanırım çalışma zamanına etki edebilir)

KeyValuePair'i genelde dictionary yapısına benzetirler fakat onlar da farklıdır.
çünkü KeyValuePair bir item tipi iken dictionary ya da Hashtable koleksiyon yapısıdır.
 
  • Beğen
Tepkiler: N S

Z'nick

Üye
5 Ara 2021
104
44
PAHİYTAHT


Herkese merhaba arkadaşlar bugün sizinle C# üzerinde HashTable kullanımını konuşacağız.

C# – Diziler ve koleksiyonlar” başlıklı yazımda koleksiyonların avantajlarından, dezavantajlarından bahsedip, genel bilgi vermiştim. Bu yazımda ise bir koleksiyon sınıfı olan Hashtable‘dan bahsedeceğiz.

Öncelikle Hashtable non-generic bir koleksiyon türüdür.

4vs6q4u.png



Dizilerde elemanlar, belleğe sıralı bir şekilde yerleştirilmektedir. Sıfırdan başlanarak her bir elemana birer indeks değeri verilip, elemanlara o indeksler aracılığıyla erişmemiz sağlanmaktaydı.

ak304n5.jpg



Hashtable koleksiyonunda ise Anahtar(Key) ve Değer(Value) olmak üzere iki kavram karşımıza çıkmakta.
Bunu diziler üzerinden şöyle örneklendirebilirim;
eklediğimiz elemanlar
(değer), o elemanlara erişmek için kullandığımız indeksleri de (anahtar) olarak düşünebilirsiniz.

Her bir Değerin farklı bir Anahtarı olmalıdır
yani koleksiyon içerisinde yer alan Anahtarlar birbirinden farklı olmalıdır.
şimdi HashTable'ı örneklerle pekiştirelim


En başta bu şekilde Hashtable'ı oluşturalım
C#:
  Hashtable ht = new Hashtable();


Bu şekilde anahtar ve değerlerimizi ekliyoruz
C#:
 //  Add(Eklenecek_Anahtar, Eklenecek_Deger) Metodu

            ht.Add("KaptanTR", 1415);    

            ht.Add("'CaptainKanka", 1072);

            ht.Add("Coderx37", 198);

            ht.Add("M R X", 1101);

            ht.Add("'Adige", 9331);

DEĞER SORGULAMA
C#:
             //ContainsKey(Aranan_Anahtar) Metodu

            // Koleksiyon içerisinde, parametre olarak girilen değerde bir Anahtar(Key) mevcutsa TRUE  değilse FALSE döndürecektir.

            if (ht.ContainsKey("Coderx37"))
                Console.WriteLine(ht["Coderx37"]);

            else
                Console.WriteLine("kullanıcı Bulunamadı.");

            //  ContainsValue(Aranan_Deger) Metodu
            // Koleksiyon içerisinde, parametre olarak girilen ifadede bir Değer(Value) mevcutsa TRUE  değilse FALSE döndürecektir.


            if (ht.ContainsValue(1415))
                Console.WriteLine("KaptanTR"+"\n---------------------");
            else
                Console.WriteLine("kullanıcı bulunamadı.");

TEMİZLEME FONKSİYONLARI
C#:
ht.Clear();  // tamamını temizleme fonksiyonu

         
ht.Remove("'CaptainKanka");    //Koleksiyon içerisinde, parametre olarak girilen değerde bir Anahtar(Key) mevcutsa;
                                                                // Anahtarı ve anahtarla ilişkili Değeri silecektir.
                                                               //captainKanka hocam kusura bakmasın :)

DEĞERLERİ VE ANAHTARLARI EKRANA YAZDIRMA
C#:
  // Anahtarları(Keys) içeren bir koleksiyon döndürmektedir.
            ArrayList arrayList = new ArrayList(ht.Keys);
            foreach (object Anahtar in arrayList)
            {
                Console.WriteLine(Anahtar+"\n----------");
            }

            // değerli(values) içeren bir koleksiyon döndürmektedir.
            ArrayList arrayList1 = new ArrayList(ht.Values);
            foreach (object Deger in arrayList1)
            {
                Console.WriteLine(Deger+"\n --------");
            }

ANAHTAR-DEĞER ÇİFTLERİNİN SAYISINI DÖNDÜRME
C#:
            //Count Özelliği
            //Koleksiyon içerisinde bulunan anahtar-değer çiftlerinin sayısını döndürmektedir.
             Console.WriteLine(ht.Count);


OKUDUĞUNUZ İÇİN TEŞEKKÜR EDERİM.
Eline sağlık
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.