Örneklerle C# Hashtable
⚡ Akıllı Özet
C#'da hashtable, System.Collections ad alanından gelen ve verileri anahtar-değer çiftleri olarak depolayan bir koleksiyondur; burada her benzersiz anahtar bir değere karşılık gelir ve anahtar, depolanan değere hızlı erişim sağlar.

C#'ta Hashtable nedir?
Karma tablosu, anahtar/değer öğelerini depolamak için kullanılan özel bir koleksiyondur. Yani yığın, dizi listesi ve kuyruk gibi tek bir değeri depolamak yerine karma tablosu 2 değeri saklar. Bu 2 değer karma tablosunun bir öğesini oluşturur.
Aşağıda bir karma tablosunun değerlerinin nasıl görünebileceğine dair bazı örnekler verilmiştir.
{ "001" , ".Net" }
{ "002" , ".C#" }
{ "003" , "ASP.Net" }
Yukarıda 3 anahtar değer çiftimiz var. Her elemanın tuşları sırasıyla 001, 002 ve 003'tür. Her anahtar değer çiftinin değerleri “. NetSırasıyla “, “C#” ve “ASP.Net”.
Hashtable koleksiyonu için mevcut işlemlere daha ayrıntılı olarak bakalım.
Hashtable Bildirgesi
Bir Hashtable'ın bildirimi aşağıda gösterilmiştir. Hashtable Veri Tipinin yardımıyla bir Hashtable oluşturulur. “Yeni” anahtar sözcüğü bir Hashtable nesnesi oluşturmak için kullanılır. Daha sonra nesne ht değişkenine atanır.
Hashtable ht = new Hashtable()
Hashtable'a öğe ekleme
Add yöntemi, bir öğeyi eklemek için kullanılır. kuyruk. İfadenin genel sözdizimi aşağıda verilmiştir
HashTable.add("key","value")
Örnek 1:
Hash tablosunun her öğesinin 2 değerden oluştuğunu unutmayın; biri anahtar, diğeri değerdir.
Şimdi bunun kod düzeyinde çalıştığını görelim. Aşağıda belirtilen kodların tamamı Konsol uygulamamıza yazılacaktır.
Kod Program.cs dosyamıza yazılacaktır. Aşağıdaki programda yukarıda bahsettiğimiz yöntemleri nasıl kullanabileceğimizi görmek için kod yazacağız.
Şimdilik örneğimizde sadece hashtable'ı nasıl oluşturabileceğimize, hashtable'a nasıl öğeler ekleyebileceğimize ve bunları buna göre nasıl görüntüleyebileceğimize bakacağız.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("001",".Net"); ht.Add("002","C#"); ht.Add("003","ASP.Net"); ICollection keys = ht.Keys; foreach (String k in keys) { Console.WriteLine(ht[k]); } Console.ReadKey(); } } }
Code Açıklama:-
- Öncelikle “New” anahtar kelimesini kullanarak Hashtable veri tipini kullanarak hashtable değişkenini deklare ediyoruz. Tanımlanan değişkenin adı 'ht'tir.
- Daha sonra Add yöntemini kullanarak karma tablosuna öğeler ekliyoruz. Hashtable'a bir şey eklerken hem anahtar hem de değer öğesi eklememiz gerektiğini unutmayın.
- Karma tablonun öğelerini görüntülemenin doğrudan bir yolu yoktur.
- Hashtable'ı görüntülemek için öncelikle hash tablosundan anahtarların (001, 002 ve 003) listesini almamız gerekiyor.
- Bu ICollection arayüzü aracılığıyla yapılır. Bu, hash tablosu koleksiyonlarının anahtarlarını depolamak için kullanılabilecek özel bir veri türüdür. Daha sonra hash tablosu koleksiyonunun anahtarlarını 'keys' değişkenine atarız.
- Daha sonra, her anahtar değer için, ht[k] ifadesini kullanarak hash tablosundaki ilgili değeri elde ederiz.
Yukarıdaki kod düzgün bir şekilde girilip program çalıştırıldığında aşağıdaki çıktı görüntülenecektir.
Çıktı:
Hash tabloları için mevcut bazı yöntemlere bakalım.
Anahtar İçerir
Bu yöntem Hashtable'da bir anahtarın mevcut olup olmadığını görmek için kullanılır. Aşağıda bu ifadenin genel sözdizimi verilmiştir. Anahtar mevcutsa ifade true değerini döndürür, aksi takdirde false değerini döndürür.
Hashtable.Containskey(key)
İçerirDeğer
Bu yöntem Hashtable'da bir Değerin mevcut olup olmadığını görmek için kullanılır. Aşağıda bu ifadenin genel sözdizimi verilmiştir. Eğer Değer mevcutsa ifade true değerini döndürür, aksi halde false değerini döndürür.
Hashtable.ContainsValue(value)
Örnek 2:
Kodumuzdaki kodu değiştirelim Konsol uygulaması “Containskey” ve “ContainsValue” yöntemini nasıl kullanabileceğimizi göstermek için.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("001",".Net"); ht.Add("002","C#"); ht.Add("003","ASP.Net"); Console.WriteLine(ht.ContainsKey("001")); Console.WriteLine(ht.ContainsValue("C#")); Console.ReadKey(); } } }
Code Açıklama:-
- İlk olarak, anahtarın hashtable'da mevcut olup olmadığını görmek için ContainerKey yöntemini kullanıyoruz. Anahtar hash tablosunda mevcutsa bu yöntem true değerini döndürür. Anahtar hash tablosunda mevcut olduğundan bu yöntem true değerini döndürmelidir.
- Daha sonra değerin hash tablosunda mevcut olup olmadığını görmek için ContainerValue yöntemini kullanırız. Değer karma tablosunda mevcut olduğundan bu yöntem 'true' değerini döndürecektir.
Yukarıdaki kod düzgün bir şekilde girilip program çalıştırıldığında aşağıdaki çıktı görüntülenecektir.
Çıktı:
Çıktıdan, hem anahtarın hem de aranan değerin karma tablosunda mevcut olduğunu açıkça görebilirsiniz.
C# Hashtable'da Döngü Nasıl Oluşturulur?
Yukarıdaki örnekler, Keys koleksiyonu aracılığıyla değerleri okuyordu, ancak bir Hashtable'ı daha temiz bir şekilde gezmek mümkün. DictionaryEntry üzerinde bir foreach döngüsü, her öğenin anahtarını ve değerini tek bir geçişte birlikte size verir; bu, bir Hashtable'ı okumanın en yaygın yoludur.
) 1 Adım Bir karma tablo oluşturun ve içine üç anahtar-değer çifti ekleyin.
) 2 Adım DictionaryEntry değişkenini kullanarak Hashtable üzerinde döngü oluşturun, ardından her bir girdinin Key ve Value özelliklerini okuyun.
using System; using System.Collections; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("101", "Java"); ht.Add("102", "Python"); ht.Add("103", "Kotlin"); foreach (DictionaryEntry entry in ht) { Console.WriteLine(entry.Key + " - " + entry.Value); } Console.ReadKey(); } } }
Code Açıklama:-
- ht adında bir karma tablo oluşturulur ve Add metodu kullanılarak üç anahtar-değer çifti eklenir.
- `foreach` döngüsü, her bir öğeyi bir `DictionaryEntry`'ye atar; bu `DictionaryEntry`'nin `Key` ve `Value` özellikleri, çiftin iki yarısını ortaya koyar.
Program çalıştırıldığında, her tuşun yanına değerini yazdırır, örneğin 101 – JavaHashtable'lar ekleme sırasını korumadığından, çiftler eklendikleri sıradan farklı bir sırada görünebilir. Yalnızca anahtarları okumak için Keys koleksiyonu üzerinde, yalnızca değerleri okumak için ise Values koleksiyonu üzerinde döngü yapın.
C# Hashtable Metotları ve Özellikleri
Hashtable sınıfı, çift ekleme ve çıkarma işlemlerinden üyelik kontrolüne ve eleman saymaya kadar ihtiyaç duyacağınız hemen her görevi kapsayan küçük bir yöntem ve özellik kümesi sunar. En kullanışlı üyeler aşağıda listelenmiştir.
| Üye | Menşei | Açıklama |
|---|---|---|
| Anahtar ve değeri ekle | Yöntem | Yeni bir anahtar ve değer çifti ekler; anahtar benzersiz olmalıdır. |
| Kaldır (anahtar) | Yöntem | Belirtilen anahtarla eşleşen öğeyi siler. |
| Temizlemek() | Yöntem | Hash tablosundaki tüm anahtar-değer çiftlerini siler. |
| Anahtar İçerir(anahtar) | Yöntem | Verilen anahtar mevcutsa true değerini döndürür. |
| Değer İçerir(değer) | Yöntem | Verilen değer mevcut olduğunda true değerini döndürür. |
| saymak | Varlığınızı | Saklanan anahtar-değer çiftlerinin sayısını alır. |
| Anahtarlar | Varlığınızı | Tüm anahtarların bir koleksiyonunu döndürür. |
| Değerler | Varlığınızı | Tüm değerlerin bir koleksiyonunu döndürür. |
Her anahtar karma algoritmasıyla işlendiği için, ContainsKey ve indeksleyici bir öğeyi neredeyse sabit sürede bulur; bu da karma tabloları hızlı aramalar için çok kullanışlı kılan şeydir.
C#'da Hashtable ve Dictionary Arasındaki Fark
Hem Hashtable hem de Dictionary, anahtar-değer çiftlerini saklar ve her ikisi de C#'ın daha geniş ailesine aittir. koleksiyonÖnemli fark tür güvenliğidir ve bu fark, yeni kod yazarken hangisini tercih etmeniz gerektiğine karar verir.
- Tip güvenliği: Bir Hashtable, her anahtar ve değeri bir nesne olarak saklarken, Dictionary ise aynı işlevi görür. Genel bir yapıda olduğu için derleyici kullandığınız türleri kontrol eder.
- Ad alanı: Hashtable, System.Collections içinde yer alırken, Dictionary ise System.Collections.Generic içinde yer alır.
- Boxing: Bir Hashtable, int gibi değer türlerini kutular içine alırken, genel bir Dictionary bunları doğrudan depolar ve bu maliyetten kaçınır.
- Performans: Sözlükler genellikle daha hızlıdır çünkü bir değer okurken nesneden geri tür dönüştürme işlemine gerek duymazlar.
- İplik güvenliği: Hashtable şunları sunar: SyncTek bir yazıcı ve birçok okuyucu için kullanılan kronize sarmalayıcı, eşzamanlı kod genellikle ConcurrentDictionary'yi tercih ederken.
Yeni projeler için genel sözlük (Dictionary) önerilen seçenektir, genel olmayan karma tablo (Hashtable) ise çoğunlukla eski kodlarda bulunur.




