Den Unterschied zwischen zwei String-Slices finden
Beim Programmieren ist der Vergleich des Inhalts zweier Slices eine häufige Aufgabe. Diese Frage konzentriert sich darauf, die Elemente zu identifizieren, die in einem Slice vorhanden sind, in einem anderen jedoch nicht, und so effektiv den „Unterschied“ zwischen ihnen zu finden.
Das gewünschte Ergebnis besteht darin, ein neues Slice zu erhalten, das die eindeutigen Elemente des ersten Slice enthält im zweiten nicht vorhanden. Wenn beispielsweise Slice1 ["foo", "bar", "hello"] enthält und Slice2 ["foo", "bar"] enthält, wäre der Unterschied ["hello"].
Eine einfache Lösung mithilfe einer Karte
Ein zuverlässiger Ansatz zur Lösung dieses Problems ist die Verwendung einer Karte. Karten in Go bieten effiziente Suchoperationen mit einer annähernd konstanten Zeitkomplexität von O(1). So können wir diesen Ansatz implementieren:
// difference returns the elements in `a` that aren't in `b`. func difference(a, b []string) []string { mb := make(map[string]struct{}, len(b)) for _, x := range b { mb[x] = struct{}{} } var diff []string for _, x := range a { if _, found := mb[x]; !found { diff = append(diff, x) } } return diff }
Erklärung
Diese Funktion verwendet zwei String-Slices, a und b, als Eingabe. Es erstellt eine Karte, mb, die jedes Element von b einer leeren Struktur zuordnet. Diese Karte wird verwendet, um das Vorhandensein von Elementen in b mit O(1)-Suchen effizient zu bestimmen.
Die Funktion iteriert dann durch a und vergleicht jedes Element mit den in mb vorhandenen Elementen. Wenn ein Element von a in MB nicht gefunden wird, wird es dem Diff-Slice hinzugefügt.
Schließlich wird das Diff-Slice zurückgegeben, das die eindeutigen Elemente von a enthält, die in b nicht vorhanden sind.
Das obige ist der detaillierte Inhalt vonWie finde ich effizient den Unterschied zwischen zwei String-Slices in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!