go / intermediate
Snippet
Effiziente Slice-Filterung ohne Allokation von neuem Speicher
Das Filtern eines Slices in Go kann direkt vor Ort (in-place) erfolgen, indem das zugrunde liegende Array des Eingabe-Slices wiederverwendet wird. Dies vermeidet die Zuweisung eines neuen Slices auf dem Heap und verbessert die Speicherleistung.
snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package mainimport "fmt"func filterEven(numbers []int) []int {n := 0for _, x := range numbers {if x%2 == 0 {numbers[n] = xn++}}return numbers[:n]}func main() {nums := []int{1, 2, 3, 4, 5, 6}filtered := filterEven(nums)fmt.Println("Filtered:", filtered)fmt.Println("Original backing array modified:", nums)}
Erklärung
1
n := 0
Initialisiert einen Index-Tracker, um Elemente in dasselbe zugrunde liegende Array zu schreiben.
2
numbers[n] = x
Überschreibt das Element an Position `n` mit dem aktuell passenden Element.
3
n++
Erhöht den Index-Tracker, um sich auf das nächste passende Element vorzubereiten.
4
return numbers[:n]
Gibt einen Slice-Ausdruck zurück, der dasselbe zugrunde liegende Array bis zur Länge `n` teilt.