Problem:
Gegeben sind zwei ganzzahlige Slices, Array1 und Array2 Das Ziel besteht darin, ein Element aus Array2 an einem bestimmten Index in Array1 einzufügen und dabei die Reihenfolge der vorhandenen Elemente beizubehalten. Im bereitgestellten Beispiel bedeutet dies, dass Array2[2], also 6, bei Array1[1] eingefügt wird, was dazu führt, dass Array1 zu [1, 6, 3, 4, 5] wird.
Lösung verwenden der :-Operator:
Der traditionelle Ansatz zum Einfügen eines Werts in ein Slice besteht darin, den :-Operator zu verwenden, um ein neues Slice zu erstellen. Diese Technik führt jedoch normalerweise zum Einfügen zusätzlicher Elemente, was in diesem Fall nicht das gewünschte Verhalten ist.
Alternative Lösungen:
1. Go 1.21 Slices.Insert-Funktion:
Mit der Veröffentlichung von Go 1.21 wurde eine spezielle Slices.Insert-Funktion eingeführt, die das Einfügen von Werten in Slices vereinfacht. Seine Syntax lautet:
result = slices.Insert(slice, index, value)
Diese Funktion benötigt drei Argumente: das Original-Slice, den Index, an dem der Wert eingefügt werden soll, und den Wert selbst. Es fügt den Wert am angegebenen Index ein und verschiebt alle nachfolgenden Elemente im Slice nach rechts.
2. Manuelles Einfügen:
Ein anderer Ansatz umfasst einen zweistufigen Prozess:
3. Generische Funktion:
Eine generische Funktion insert kann implementiert werden, um Slices jeglicher Art zu verarbeiten:
func insert[T any](a []T, index int, value T) []T
Diese Funktion folgt einem ähnlichen Ansatz wie die manuelle Einfügungsmethode, bietet jedoch Flexibilität durch Ermöglicht die Verwendung mit Scheiben unterschiedlicher Art.
4. Verwenden von Make und Copy:
Eine andere Möglichkeit besteht darin, mit der Make-Funktion ein neues Slice mit der gewünschten Kapazität zu erstellen und dann mit der Copy-Funktion die vorhandenen Elemente zu kopieren und gleichzeitig den Wert am angegebenen Index einzufügen :
b := make([]int, len(a)+1) copy(b[:index], a) b[index] = value copy(b[index+1:], a[index:])
Benchmarks:
Leistungsbenchmarks zeigen, dass die Funktion „slices.Insert“ am effizientesten ist, gefolgt von der generischen Funktion „insert“. Insgesamt hängt die am besten geeignete Methode von den spezifischen Anforderungen des Programms und der verwendeten Go-Version ab.
Das obige ist der detaillierte Inhalt vonWie füge ich in Go einen Wert an einem bestimmten Index in ein Slice ein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!