Hoppa till innehåll

Bygg en hashtabell i C#

↑

En hashtabell behöver en array med buckets. Vid separate chaining innehåller varje bucket noll eller fler poster. Varje post sparar både nyckel och värde. Vid Put beräknas index, befintlig nyckel jämförs och posten uppdateras eller läggs till. TryGetValue och Remove behöver bara undersöka den aktuella bucketen.

Vår nedladdningsbara EducationalHashMap<TKey,TValue> implementerar Put, TryGetValue, Remove, Count och automatisk omallokering. Den använder IEqualityComparer<TKey>, hanterar negativa hashkoder och omhashar poster när beläggningen växer. Den är medvetet enklare än .NET:s produktions-Dictionary. Läs källkoden och följ varje operation.

C# | Example.cs
// EducationalHashMap.cs must be in the same .NET project.
var scores = new EducationalHashMap<string, int>(5);
scores.Put("Ada", 10);
scores.Put("Grace", 20);
scores.Put("Ada", 15); // replace by equal key, not duplicate
if (scores.TryGetValue("Ada", out int value))
Console.WriteLine(value); // 15
Console.WriteLine(scores.Remove("Grace")); // True
Console.WriteLine(scores.Count); // 1

Följ koden: Beräkna index med jämförarens hashkod, jämför nycklar i bucketen, kontrollera beläggning före en ny post och fördela om alla poster vid resizing. Normal förväntad kostnad är O(1) med bra hashning; i värsta fall kan det bli O(n). Öva: Ändra startstorlek och bekräfta att uppslag fungerar efter resizing.

Ladda ned fullständig EducationalHashMap.cs

Klassen är pedagogisk kod, inte en ersättning för Dictionary<TKey,TValue> i produktionssystem.

Interaktiv hashtabell · HashSet och Dictionary