Documentation
¶
Index ¶
- func AnyOf[T any](vs []T, filter func(T) bool) bool
- func Batch[T any](vs []T, size int) [][]T
- func Clone[T any](src []T) []T
- func Contains[T comparable](s []T, v T) bool
- func Filter[T any](src []T, filter func(v T) bool) []T
- func FilterErr[T any](src []T, filter func(v T) (bool, error)) ([]T, error)
- func Find[T any](vs []T, by func(T) bool) (T, bool)
- func First[T any](vs []T) (T, bool)
- func GroupBy[T any, ID comparable](vs []T, by func(v T) ID) map[ID][]T
- func Insert[T any](vs *[]T, index int, nvs ...T)
- func Last[T any](vs []T) (T, bool)
- func Lookup[T any](vs []T, index int) (T, bool)
- func Map[O, I any](s []I, mapper func(I) O) []O
- func MapErr[O, I any](s []I, mapper func(I) (O, error)) ([]O, error)
- func Merge[T any](slices ...[]T) []T
- func Pop[T any](vs *[]T) (T, bool)
- func PopAt[T any](vs *[]T, index int) (T, bool)
- func Reduce[O, I any](s []I, initial O, reducer func(O, I) O) O
- func ReduceErr[O, I any](s []I, initial O, reducer func(O, I) (O, error)) (O, error)
- func Shift[T any](vs *[]T) (T, bool)
- func SortBy[T any](vs []T, less func(a, b T) bool)
- func Unique[T comparable](vs []T) []T
- func UniqueBy[T any, ID comparable](vs []T, by func(T) ID) []T
- func Unshift[T any](vs *[]T, nvs ...T)
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Batch ¶ added in v0.217.0
Example ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { vs := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15} batches := slicekit.Batch(vs, 5) _ = batches // 0 -> []int{1, 2, 3, 4, 5} // 1 -> []int{6, 7, 8, 9, 10} // 2 -> []int{11, 12, 13, 14, 15} }
func Clone ¶ added in v0.198.0
func Clone[T any](src []T) []T
Clone creates a clone from passed src slice.
Example ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { var ( src = []string{"a", "b", "c"} dst = slicekit.Clone(src) ) _, _ = src, dst }
func Contains ¶ added in v0.212.0
func Contains[T comparable](s []T, v T) bool
Contains reports if a slice contains a given value.
Example ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { _ = slicekit.Contains([]string{"foo", "bar", "baz"}, "bar") // true _ = slicekit.Contains([]int{7, 42, 128}, 128) // true _ = slicekit.Contains([]int{7, 42, 128}, 32) // false }
func Filter ¶ added in v0.200.0
Example ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { var ( src = []string{"a", "b", "c"} dst = slicekit.Filter(src, func(s string) bool { return s != "c" }) ) _ = dst // []string{"a", "b"}, nil }
func FilterErr ¶ added in v0.226.0
Example ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { var ( src = []string{"a", "b", "c"} dst, err = slicekit.FilterErr[string](src, func(s string) (bool, error) { return s != "c", nil }) ) _, _ = dst, err // []string{"a", "b"}, nil }
func Find ¶ added in v0.270.0
Find will find the first matching element in a slice based on the "by" filter function.
Example ¶
package main import ( "time" "go.llib.dev/frameless/pkg/slicekit" ) func main() { type Person struct { Name string Birthday time.Time } var ps []Person person, ok := slicekit.Find(ps, func(p Person) bool { return p.Birthday.After(time.Date(2000, 1, 1, 12, 00, 00, 00, time.UTC)) }) _, _ = person, ok }
func GroupBy ¶ added in v0.272.0
func GroupBy[T any, ID comparable](vs []T, by func(v T) ID) map[ID][]T
GroupBy will group values in []T based on the group indetifier function.
Example ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { vs := []int{1, 2, 3, 4, 5} groups := slicekit.GroupBy(vs, func(n int) string { if n%2 == 0 { return "even" } return "odd" }) _ = groups }
func Last ¶ added in v0.257.0
Example ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { var list = []int{1, 2, 3} last, ok := slicekit.Last(list) _ = ok // true _ = last // 3 }
Example (OnEmpty) ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { var list = []string{} last, ok := slicekit.Last(list) _ = ok // false _ = last // "" }
Example (OnNil) ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { var list []byte last, ok := slicekit.Last(list) _ = ok // false _ = last // 0 }
func Lookup ¶ added in v0.186.0
Example ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { vs := []int{2, 4, 8, 16} slicekit.Lookup(vs, 0) // -> return 2, true slicekit.Lookup(vs, 0-1) // lookup previous -> return 0, false slicekit.Lookup(vs, 0+1) // lookup next -> return 4, true slicekit.Lookup(vs, 0+1000) // lookup 1000th element -> return 0, false }
func Map ¶
func Map[O, I any](s []I, mapper func(I) O) []O
Map will do a mapping from an input type into an output type.
Example ¶
package main import ( "strconv" "strings" "go.llib.dev/frameless/pkg/slicekit" ) func main() { var x = []string{"a", "b", "c"} _ = slicekit.Map(x, strings.ToUpper) // []string{"A", "B", "C"} var ns = []string{"1", "2", "3"} _, err := slicekit.MapErr[int](ns, strconv.Atoi) // []int{1, 2, 3} if err != nil { panic(err) } }
func MapErr ¶ added in v0.226.0
MapErr will do a mapping from an input type into an output type.
Example ¶
package main import ( "strconv" "strings" "go.llib.dev/frameless/pkg/must" "go.llib.dev/frameless/pkg/slicekit" ) func main() { var x = []string{"a", "b", "c"} _ = must.Must(slicekit.MapErr[string](x, func(s string) (string, error) { return strings.ToUpper(s), nil })) // []string{"A", "B", "C"} var ns = []string{"1", "2", "3"} _, err := slicekit.MapErr[int](ns, strconv.Atoi) // []int{1, 2, 3} if err != nil { panic(err) } }
func Merge ¶ added in v0.188.0
func Merge[T any](slices ...[]T) []T
Merge will merge every []T slice into a single one.
Example ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { var ( a = []string{"a", "b", "c"} b = []string{"1", "2", "3"} c = []string{"1", "B", "3"} out = slicekit.Merge(a, b, c) ) _ = out // []string{"a", "b", "c", "1", "2", "3", "1", "B", "3"} }
func Pop ¶ added in v0.257.0
Example ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { var list = []int{1, 2, 3} v, ok := slicekit.Pop(&list) _ = ok // true _ = v // 3 _ = list // []int{1, 2} }
Example (OnEmpty) ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { var list = []string{} v, ok := slicekit.Pop(&list) _ = ok // false _ = v // "" _ = list // []string{} }
Example (OnNil) ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { var list []byte v, ok := slicekit.Pop(&list) _ = ok // false _ = v // 0 _ = list // ([]byte)(nil) }
func Reduce ¶
func Reduce[O, I any](s []I, initial O, reducer func(O, I) O) O
Reduce iterates over a slice, combining elements using the reducer function.
Example ¶
package main import ( "fmt" "strconv" "go.llib.dev/frameless/pkg/slicekit" ) func main() { var x = []int{1, 2, 3} got := slicekit.Reduce[string](x, "|", func(s string, i int) string { return s + strconv.Itoa(i) }) fmt.Println(got) // "|123" }
func ReduceErr ¶ added in v0.226.0
ReduceErr iterates over a slice, combining elements using the reducer function.
Example ¶
package main import ( "fmt" "go.llib.dev/frameless/pkg/slicekit" ) func main() { var x = []string{"a", "b", "c"} got, err := slicekit.ReduceErr[string](x, "|", func(o string, i string) (string, error) { return o + i, nil }) if err != nil { panic(err) } fmt.Println(got) // "|abc" }
func Shift ¶ added in v0.257.0
Example ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { var list = []int{1, 2, 3} v, ok := slicekit.Shift(&list) _ = ok // true _ = v // 1 _ = list // []int{2, 3} }
Example (OnEmpty) ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { var list = []string{} v, ok := slicekit.Shift(&list) _ = ok // false _ = v // "" _ = list // []string{} }
Example (OnNil) ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { var list []byte v, ok := slicekit.Shift(&list) _ = ok // false _ = v // 0 _ = list // ([]byte)(nil) }
func Unique ¶ added in v0.233.0
func Unique[T comparable](vs []T) []T
Example ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { slicekit.Unique([]int{1, 2, 2, 3, 3, 3}) // -> []int{1, 2, 3} }
func UniqueBy ¶ added in v0.269.0
func UniqueBy[T any, ID comparable](vs []T, by func(T) ID) []T
Example ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { type T struct { ID int Val string } vs := []T{ {ID: 1, Val: "foo1"}, {ID: 2, Val: "bar1"}, {ID: 2, Val: "bar2"}, {ID: 3, Val: "baz1"}, {ID: 3, Val: "baz2"}, {ID: 3, Val: "baz3"}, } slicekit.UniqueBy(vs, func(v T) int { return v.ID }) // []T{ // {ID: 1, Val: "foo1"}, // {ID: 2, Val: "bar1"}, // {ID: 3, Val: "baz1"}, // } }
func Unshift ¶ added in v0.257.0
func Unshift[T any](vs *[]T, nvs ...T)
Example ¶
package main import ( "go.llib.dev/frameless/pkg/slicekit" ) func main() { var list []string _ = list // ([]string)(nil) slicekit.Unshift(&list, "foo") _ = list // []string{"foo"} slicekit.Unshift(&list, "bar") _ = list // []string{"bar", "foo"} slicekit.Unshift(&list, "baz", "qux") _ = list // []string{"baz", "qux", "bar", "foo"} }
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.