Warum ist die Wörterbuch-vorgezogen, Hashtable in C#?

In den meisten Programmier-Sprachen, Wörterbücher, bevorzugt über hashtables.
Was sind die Gründe dahinter?

  • > Dies ist nicht unbedingt wahr. Eine hash-Tabelle ist eine Implementierung eines dictionary. Ein typisches one an, es kann sein, das standardmäßig in .NET, aber es ist nicht per definition der einzige. Ich bin mir nicht sicher, dass dies erforderlich ist, durch den ECMA-standard, aber die MSDN-Dokumentation sehr deutlich ruft es aus, wie Sie derzeit umgesetzt wird, wie eine hashtable. Sie bieten sogar die SortedList-Klasse für die Zeiten, wenn eine alternative mehr zumutbar ist.
  • Ich dachte immer, die Dictionary war eine Umsetzung der Hashtable.
  • Ich denke der Grund dafür ist, dass in einem Wörterbuch können Sie definieren, welche Art von Schlüssel und Wert für Ihr selfe. die Hashtabelle kann nur Objekte und speichert die Paare basierend auf der hash (Objekt.GetHashCode() ).
  • Ihre Forderung ist ganz Irre ... eine hash-Tabelle enthält nur eine Instanz von jedem Schlüssel, und eine Suche ist nie Erträge mehrere Einträge; wenn Sie möchten, verknüpfen Sie mehrere Werte mit jeder Taste, stellen Sie die hash-Tabelle Wert in einer Liste mit Werten. Es gibt keine solche Datenstruktur als "Wörterbuch" Wörterbuch ... ist einfach der name, dass einige Bibliotheken verwenden Sie für Ihre hash-Tabelle. z.B. C#'s nicht-generische hash-Tabelle genannt HashTable. Wenn Sie Hinzugefügt, Generika, um die Sprache, nannten Sie die generische version Dictionary. Sind beide hash-Tabellen.
  • Ihre Forderung ist Irre ... eine hash-Tabelle (en.wikipedia.org/wiki/Hash_table) ist eine bestimmte Implementierung eines dictionary, aka assoziatives array (en.wikipedia.org/wiki/Associative_array), und, als ein Wörterbuch, enthält nur eine Instanz von jedem Schlüssel, und eine Suche ist nie Erträge mehrere Einträge; wenn Sie möchten, verknüpfen Sie mehrere Werte mit jeder Taste, stellen Sie die hash-Tabelle Wert in einer Liste mit Werten. Und die .NET Dictionary und Hashtable die Klassen sind beide hash-Tabellen.
  • Der ursprüngliche Titel war die Frage c# - spezifisch. Ich habe wiederhergestellt "in c#", um den Titel.
  • Nicht zu verwechseln mit HashSet<T>, die im Gegensatz zu HashTable ist generisch.

Schreibe einen Kommentar