Hash-Tabellensammlungen in C# speichern Schlüssel-Wert-Paare. Jedes Element oder Element in der Sammlung ist ein Schlüssel-Wert-Paar, das heißt, die Sammlung ist eine Sammlung mit zwei Elementen. Der Schlüssel ist ein eindeutiger, nicht leerer Schlüssel, der für den Zugriff auf Elemente in einer Hash-Tabelle verwendet wird.
Hash-Tabellensammlungen sind unveränderlich und können keine doppelten Elemente enthalten. Das bedeutet, dass Schlüssel-Wert-Kombinationen eindeutig sein sollten. Diese Werte können jedoch leer oder wiederholt sein. .Net Framework stellt eine HashTable-Klasse zum Implementieren einer Hash-Tabellensammlung bereit und enthält die Funktionalität, die zum Implementieren einer Hash-Tabelle ohne zusätzliche Codierung erforderlich ist.
Jedes Element in einer Hash-Tabellensammlung ist ein DictionaryEntry-Objekt mit zwei Eigenschaften: einem Schlüsselelement und einem Wertelement. Wenn ein Element zu einer Hash-Tabelle hinzugefügt wird, wird automatisch ein Hash-Code generiert. Dieser Hash-Code ist intern und versteckt. Die Elemente in einer Hash-Tabellensammlung werden nach dem versteckten Hash-Code sortiert. Daher gelten Hash-Tabellenelemente als zufällig ausgewählt.
Mit einer kurzen Einführung in Hash-Tabellensammlungen sehen wir uns an, wie man zwei Hash-Tabellensammlungen zusammenführt.
Hashtable-Klasse wird von System bereitgestellt. Der Collection-Namespace enthält nur Basisklassenbibliotheken, die zum Erstellen von Hash-Tabellenobjekten und zum Ausführen von Vorgängen wie dem Hinzufügen/Entfernen von Elementen, dem Zählen der Anzahl von Elementen usw. verwendet werden können. Es gibt keine Methode/Funktion, mit der zwei Hash-Tabellen zusammengeführt werden können.
Wir müssen unseren eigenen Weg finden, zwei Hash-Tabellen zusammenzuführen. Wir wissen, dass die Kapazität oder Größe einer Hash-Tabelle die Anzahl der Elemente ist, die die Hash-Tabelle enthält. Wenn Elemente in die Hash-Tabelle eingefügt werden, wächst die Größe der Hash-Tabelle automatisch durch Neuzuweisung.
Wenn wir also zwei Hash-Tabellen zusammenführen, fügen wir Elemente einer Hash-Tabelle zur anderen hinzu. Wenn wir Elemente hinzufügen, wird die Größe dieser Hash-Tabelle entsprechend angepasst.
Erstellen Sie zwei Hash-Tabellenobjekte.
Verwenden Sie die Add-Methode, um beide Tabellen mit Elementen zu füllen.
Durchlaufen Sie die zweite Hash-Tabelle mit dem Schlüssel. Wenn das aktuelle Element (der Schlüssel, der durchlaufen wird) noch nicht in der ersten Hash-Tabelle vorhanden ist, fügen Sie jedes seiner Schlüssel-Wert-Paare zur ersten Hash-Tabelle hinzu.
李>Drucken Sie die generierte Hash-Tabelle.
Hinweis: Bevor wir einen Schlüssel hinzufügen, prüfen wir explizit, ob der Schlüssel in der Hash-Tabelle vorhanden ist, da Hash-Tabellen das Hinzufügen doppelter Schlüssel nicht zulassen.
Konvertieren Sie die obige Methode wie unten gezeigt in ein C#-Programm.
using System; using System. Collections; class MyHashTable { static public void Main() { Hashtable indianNumberSystem = new Hashtable(); indianNumberSystem.Add(1,"Ones"); indianNumberSystem.Add(10,"Tens"); indianNumberSystem.Add(100,"Hundred"); indianNumberSystem.Add(1000,"Thousand"); Console.WriteLine("Contents of indianNumberSystem hashtable:"); foreach(DictionaryEntry ele1 in indianNumberSystem){ Console.WriteLine("{0} ({1}) ", ele1.Key, ele1.Value); } Hashtable langCodes = new Hashtable(); langCodes.Add("C++","CPlusPlus"); langCodes.Add("C#","CSharp"); langCodes.Add("Java","Java"); langCodes.Add("PL","Perl"); Console.WriteLine("Contents of langCodes Hashtable:"); foreach(DictionaryEntry ele1 in indianNumberSystem){ Console.WriteLine("{0} ({1}) ", ele1.Key, ele1.Value); } foreach (DictionaryEntry entry in langCodes) { if(!indianNumberSystem.ContainsKey(entry.Key)) { indianNumberSystem.Add(entry.Key, entry.Value); }} Console.WriteLine("Key, Value pairs after merging langCodes to indianNumberSystem:"); foreach(DictionaryEntry ele1 in indianNumberSystem){ Console.WriteLine("{0} ({1}) ", ele1.Key, ele1.Value); } } }
Hier haben wir zwei Hash-Tabellen, indianNumberSystem und langCodes.
Die Hash-Tabelle indianNumberSystem enthält die folgenden Daten:
1 |
"eins" |
10 |
"十" |
100 |
"Einhundert" |
1000 |
"千" |
Die Hash-Tabelle langCodes enthält die folgenden Daten.
C++ |
"CPlusPlus" |
C# |
„CSharp“ |
Java |
"Java" |
PL |
"Perl" |
Wir zeigen zunächst den Inhalt dieser beiden Tabellen an. Anschließend iterieren wir darüber mit den Schlüsseln der langCodes-Hash-Tabelle. In der Traversal-Schleife prüfen wir zunächst, ob die Hash-Tabelle indianNumberSystem den gleichen Schlüssel hat. Wenn der Schlüssel nicht vorhanden ist, fügen wir das langCodes-Element, auf das der aktuelle Schlüssel zeigt, zur Hash-Tabelle indianNumberSystem hinzu.
Schließlich zeigen wir die zusammengeführte Tabelle an.
Contents of indianNumberSystem hashtable: 1000 (Thousand) 10 (Tens) 100 (Hundred) 1 (Ones) Contents of langCodes Hashtable: 1000 (Thousand) 10 (Tens) 100 (Hundred) 1 (Ones) Key, Value pairs after merging langCodes to indianNumberSystem: 100 (Hundred) 1000 (Thousand) PL (Perl) 10 (Tens) C# (CSharp) Java (Java) C++ (CPlusPlus) 1 (Ones)
Anhand der generierten Ausgabe können wir erkennen, dass beide Tabellen korrekt zusammengeführt werden.
Lassen Sie uns nun ein weiteres Beispiel betrachten, nämlich das unten angegebene C#-Programm.
using System; using System. Collections; using System.Collections.Generic; class MyHashTable { static public void Main() { Hashtable indianNumberSystem = new Hashtable(); indianNumberSystem.Add(1,"Ones"); indianNumberSystem.Add(10,"Tens"); indianNumberSystem.Add(100,"Hundred"); indianNumberSystem.Add(1000,"Thousand"); Console.WriteLine("Contents of indianNumberSystem hashtable:"); foreach(DictionaryEntry ele1 in indianNumberSystem){ Console.WriteLine("{0} ({1}) ", ele1.Key, ele1.Value); } Hashtable NumberNames = new Hashtable(); NumberNames.Add(1,"One"); NumberNames.Add(2,"Two"); NumberNames.Add(3,"Three"); NumberNames.Add(4,"Four"); Console.WriteLine("Contents of NumberNames Hashtable:"); foreach(DictionaryEntry ele1 in NumberNames){ Console.WriteLine("{0} ({1}) ", ele1.Key, ele1.Value); } foreach (DictionaryEntry entry in NumberNames) { if(!indianNumberSystem.ContainsKey(entry.Key)) { indianNumberSystem.Add(entry.Key, entry.Value); }} Console.WriteLine("Key, Value pairs after merging NumberNames to indianNumberSystem:"); foreach(DictionaryEntry ele1 in indianNumberSystem){ Console.WriteLine("{0} ({1}) ", ele1.Key, ele1.Value); } } }
Dieses Programm ist das gleiche wie das vorherige, außer dass wir die Hash-Tabelle langCodes durch die Hash-Tabelle NumberNames ersetzen. Die NumberNames-Hashtabelle enthält die folgenden Elemente.
1 |
“一” |
2 |
"Zwei" |
3 |
"Drei |
4 |
"Vier" |
Wie wir sehen können, haben die Hash-Tabellen indianNumberSystem und NumberNames gemeinsame Daten. Lassen Sie uns nun dieses Programm ausführen, um zu überprüfen, wie die Zusammenführung erfolgt.
Contents of indianNumberSystem hashtable: 1000 (Thousand) 10 (Tens) 100 (Hundred) 1 (Ones) Contents of NumberNames Hashtable: 4 (Four) 3 (Three) 2 (Two) 1 (One) Key, Value pairs after merging NumberNames to indianNumberSystem: 100 (Hundred) 1000 (Thousand) 10 (Tens) 4 (Four) 3 (Three) 2 (Two) 1 (Ones)
Wie Sie der obigen Ausgabe entnehmen können, wird das Datenelement (Schlüssel=1) in NumberNames nicht zur Hash-Tabelle indianNumberSystem hinzugefügt. Dies liegt daran, dass eine Vervielfältigung nicht zulässig ist.
So können wir zwei Hash-Tabellensammlungen zusammenführen, indem wir die Daten einer Hash-Tabelle zu einer anderen Hash-Tabellensammlung kopieren oder hinzufügen. Wenn in beiden Hashtabellen ein gemeinsamer Schlüssel vorhanden ist, werden keine doppelten Schlüssel hinzugefügt. Programmierer müssen jedoch darauf achten, beim Hinzufügen von Daten zu einer Hash-Tabelle dies zu überprüfen, um zu verhindern, dass versehentlich Daten hinzugefügt werden, was zu unvorhersehbaren Ergebnissen führt.
Das obige ist der detaillierte Inhalt vonC#-Programm zum Zusammenführen zweier Hash-Tabellensammlungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!