HashSet vs Dictionary vs Hashtable
↑Så fungerar det
Section titled “Så fungerar det”En HashSet<T> lagrar unika värden, exempelvis för medlemskap och mängdoperationer. En Dictionary<TKey,TValue> kopplar unika nycklar till värden. Hashtable är den äldre icke-generiska klassen med object-nycklar och -värden och bör sällan användas i ny kod. Begreppet hashtabell beskriver också själva datastrukturfamiljen, inte bara klassen Hashtable.
Varken HashSet<T> eller Dictionary<TKey,TValue> garanterar någon särskild uppräkningsordning. Förlita dig inte på deras interna buckets eller en specifik intern kapacitet.
Exempel i C# och C++
Section titled “Exempel i C# och C++”var onlineIds = new HashSet<int>();Console.WriteLine(onlineIds.Add(42)); // TrueConsole.WriteLine(onlineIds.Add(42)); // False, already existsConsole.WriteLine(onlineIds.Contains(42)); // True
var players = new Dictionary<int, string>();players[42] = "Ada";if (players.TryGetValue(42, out string? name)) Console.WriteLine(name);#include <unordered_set>#include <unordered_map>#include <string>#include <iostream>
std::unordered_set<int> onlineIds;std::cout << onlineIds.insert(42).second << '\n'; // 1std::cout << onlineIds.insert(42).second << '\n'; // 0std::cout << onlineIds.contains(42) << '\n'; // 1 (C++20)
std::unordered_map<int, std::string> players;players[42] = "Ada";if (auto it = players.find(42); it != players.end()) std::cout << it->second << '\n';När, varför och vanliga fallgropar
Section titled “När, varför och vanliga fallgropar”När: Välj HashSet<int> för unika ID:n och besökta noder, Dictionary<int,Player> för objektuppslag och List<T> när ordning och dubbletter är viktiga. Fallgrop: Om ett nyckelobjekts hash/likhet ändras medan det ligger i tabellen kan uppslag misslyckas.
