slices
CategoryData Structures and Algorithms
SubcategoryMiscellaneous Data Structures and Algorithms
Stars0
Pure, generic functions for slices
About slices
Slices
Pure functions for slices. Slices are never operated on "in place". Instead, new ones are returned.
Documentation
For full documentation see pkg.go.dev.
Install
go get github.com/twharmon/slices
Usage
package main
import (
"fmt"
"github.com/twharmon/slices"
)
func main() {
// use plain go slices
s := []string{"foo", "ba"}
// append new item to end of slice
s = slices.Append(s, "b")
fmt.Println(s) // [foo ba b]
// sort by string length, ascending
sorted := slices.SortFunc(s, func(a, b string) bool {
return len(a) < len(b)
})
// original slice is not chaged
fmt.Println(s, sorted) // [foo ba b] [b ba foo]
// sum the lengths of all the strings
totalLen := slices.Reduce(s, func(cnt int, i string) int {
return cnt + len(i)
})
fmt.Println(totalLen) // 6
// find the first item with length 2
str := slices.Find(s, func(item string) bool { return len(item) == 2 })
fmt.Println(str) // ba
// map slice to new slice of different type
ints := slices.Map(s, func(item string) int { return len(s) })
fmt.Println(ints) // [3 2 1]
}
Benchmarks
goos: darwin
goarch: arm64
pkg: github.com/twharmon/slices
BenchmarkSortFunc/std_lib-10 116497 9424 ns/op 4152 B/op 3 allocs/op
BenchmarkSortFunc/slices-10 101791 11479 ns/op 4096 B/op 1 allocs/op
BenchmarkSort/std_lib-10 125790 9441 ns/op 4120 B/op 2 allocs/op
BenchmarkSort/slices-10 113931 10162 ns/op 4096 B/op 1 allocs/op
BenchmarkReverse-10 1631348 749.4 ns/op 4096 B/op 1 allocs/op
BenchmarkConcat-10 275463 4259 ns/op 40960 B/op 1 allocs/op
BenchmarkFilter-10 1000000 1018 ns/op 4096 B/op 1 allocs/op
BenchmarkUnion/2x20-10 3258876 361.2 ns/op 32 B/op 1 allocs/op
BenchmarkUnion/20x2-10 502176 2329 ns/op 1592 B/op 3 allocs/op
BenchmarkUnion/20x2000-10 1140 1054108 ns/op 1590 B/op 3 allocs/op
BenchmarkUnion/2000x20-10 714 1697117 ns/op 142481 B/op 39 allocs/op
BenchmarkIntersection/2x20-10 2380771 498.0 ns/op 48 B/op 1 allocs/op
BenchmarkIntersection/20x2-10 821226 1427 ns/op 1196 B/op 3 allocs/op
BenchmarkIntersection/20x2000-10 1178 1020620 ns/op 1282 B/op 3 allocs/op
BenchmarkIntersection/2000x20-10 938 1276258 ns/op 203294 B/op 58 allocs/op
Contribute
Make a pull request.
Frequently Asked Questions
What is slices?
slices is a Data Structures and Algorithms library for the Go programming language. Pure, generic functions for slices
How do I install slices?
Install slices with the Go module system using `go get twharmon/slices`. Check the repository for the current installation instructions.
What category does slices belong to?
slices is listed under Data Structures and Algorithms, specifically Miscellaneous Data Structures and Algorithms.