slicesext

package
v1.32.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 16, 2024 License: Apache-2.0 Imports: 4 Imported by: 1

Documentation

Overview

Package slicesext provides extra functionality on top of the slices package.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Copy

func Copy[T any](s []T) []T

Copy returns a copy of the slice.

TODO FUTURE: Delete this in favor of slices.Clone.

func Count

func Count[T any](s []T, f func(T) bool) int

Count returns the number of elements in s where f returns true.

func CountError

func CountError[T any](s []T, f func(T) (bool, error)) (int, error)

CountError returns the number of elements in s where f returns true.

Returns error the first time f returns error.

func Deduplicate added in v1.32.0

func Deduplicate[V comparable](s []V) []V

Deduplicate returns the unique values of s.

func DeduplicateAny added in v1.32.0

func DeduplicateAny[K comparable, V any](s []V, f func(V) K) []V

Deduplicate returns the unique values of s when transformed with f.

Earlier occurrences of a value are returned and later occurrences are dropped.

func Duplicates

func Duplicates[T comparable](s []T) []T

Duplicates returns the duplicate values in s.

Values are returned in the order they are found in S.

If an element is the zero value, it is not added to duplicates.

func ElementsContained

func ElementsContained[T comparable](superset []T, subset []T) bool

ElementsContained returns true if superset contains subset.

Nil and empty slices are treated as equals.

func ElementsEqual

func ElementsEqual[T comparable](one []T, two []T) bool

ElementsEqual returns true if the two slices have equal elements.

Nil and empty slices are treated as equals.

func Equal added in v1.32.0

func Equal[S ~[]E, E comparable](s1, s2 S) bool

Equal reports whether two slices are equal: the same length and all elements equal. If the lengths are different, Equal returns false. Otherwise, the elements are compared in increasing index order, and the comparison stops at the first unequal pair. Floating point NaNs are not considered equal.

TODO FUTURE: Delete this in favor of slices.Equal when we are >1.21.

func Filter

func Filter[T any](s []T, f func(T) bool) []T

Filter filters the slice to only the values where f returns true.

func FilterError

func FilterError[T any](s []T, f func(T) (bool, error)) ([]T, error)

FilterError filters the slice to only the values where f returns true.

Returns error the first time f returns error.

func IndexedToSortedValues added in v1.32.0

func IndexedToSortedValues[T any](s []Indexed[T]) []T

IndexedToSortedValues takes the indexed values and returns them as values sorted by index.

func IndexedToValues added in v1.32.0

func IndexedToValues[T any](s []Indexed[T]) []T

IndexedToSortedValues takes the indexed values and returns them as values.

func Map

func Map[T1, T2 any](s []T1, f func(T1) T2) []T2

Map maps the slice.

func MapError

func MapError[T1, T2 any](s []T1, f func(T1) (T2, error)) ([]T2, error)

MapError maps the slice.

Returns error the first time f returns error.

func MapKeysToSlice

func MapKeysToSlice[K comparable, V any](m map[K]V) []K

MapKeysToSlice converts the map's keys to a slice.

func MapKeysToSortedSlice

func MapKeysToSortedSlice[M ~map[K]V, K Ordered, V any](m M) []K

MapKeysToSortedSlice converts the map's keys to a sorted slice.

func MapValuesToSlice added in v1.32.0

func MapValuesToSlice[K comparable, V any](m map[K]V) []V

MapValuesToSlice converts the map's values to a slice.

Duplicate values will be added. This should generally be used in cases where you know there is a 1-1 mapping from K to V.

func MapValuesToSortedSlice added in v1.32.0

func MapValuesToSortedSlice[K comparable, V Ordered](m map[K]V) []V

MapValuesToSlice converts the map's values to a sorted slice.

Duplicate values will be added. This should generally be used in cases where you know there is a 1-1 mapping from K to V.

func Reduce

func Reduce[T1, T2 any](s []T1, f func(T2, T1) T2, initialValue T2) T2

Reduce reduces the slice.

func ReduceError

func ReduceError[T1, T2 any](s []T1, f func(T2, T1) (T2, error), initialValue T2) (T2, error)

Reduce reduces the slice.

Returns error the first time f returns error.

func ToChunks

func ToChunks[T any](s []T, chunkSize int) [][]T

ToChunks splits s into chunks of the given chunk size.

If s is nil or empty, returns empty. If chunkSize is <=0, returns [][]T{s}.

func ToIndexedValuesMap added in v1.32.0

func ToIndexedValuesMap[K comparable, V any](values []V, f func(V) K) map[K][]Indexed[V]

ToIndexedValuesMap calls ToValuesMap on the indexed values.

func ToString added in v1.32.0

func ToString[S ~[]T, T fmt.Stringer](s S) string

ToString prints the slice as [e1,e2,...].

func ToStructMap

func ToStructMap[T comparable](s []T) map[T]struct{}

ToStructMap converts the slice to a map with struct{} values.

func ToStructMapOmitEmpty added in v1.32.0

func ToStructMapOmitEmpty[T comparable](s []T) map[T]struct{}

ToStructMapOmitEmpty converts the slice to a map with struct{} values.

Zero values of T are not added to the map.

TODO FUTURE: Make ToStructMap use this logic, remove ToStructMapOmitEmpty, to match other functions.

func ToUniqueIndexedValuesMap added in v1.32.0

func ToUniqueIndexedValuesMap[K comparable, V any](values []V, f func(V) K) (map[K]Indexed[V], error)

ToUniqueIndexedValuesMap calls ToUniqueValuesMap on the indexed values.

func ToUniqueIndexedValuesMapError added in v1.32.0

func ToUniqueIndexedValuesMapError[K comparable, V any](values []V, f func(V) (K, error)) (map[K]Indexed[V], error)

ToUniqueIndexedValuesMapError calls ToUniqueValuesMapError on the indexed values.

func ToUniqueSorted

func ToUniqueSorted[S ~[]T, T Ordered](s S) S

ToUniqueSorted returns a sorted copy of s with no duplicates.

func ToUniqueValuesMap added in v1.32.0

func ToUniqueValuesMap[K comparable, V any](s []V, f func(V) K) (map[K]V, error)

ToUniqueValuesMap transforms the input slice into a map from f(V) -> V.

If f(V) is the zero value of K, nothing is added to the map.

Duplicate values of type K will result in an error.

func ToUniqueValuesMapError added in v1.32.0

func ToUniqueValuesMapError[K comparable, V any](s []V, f func(V) (K, error)) (map[K]V, error)

ToUniqueValuesMapError transforms the input slice into a map from f(V) -> V.

If f(V) is the zero value of K, nothing is added to the map.

Duplicate values of type K will result in an error. Otherwise returns error the first time f returns error.

func ToValuesMap added in v1.32.0

func ToValuesMap[K comparable, V any](s []V, f func(V) K) map[K][]V

ToValuesMap transforms the input slice into a map from f(V) -> V.

If f(V) is the zero value of K, nothing is added to the map.

Duplicate values of type K will result in a single map entry.

func ToValuesMapError added in v1.32.0

func ToValuesMapError[K comparable, V any](s []V, f func(V) (K, error)) (map[K][]V, error)

ToValuesMapError transforms the input slice into a map from f(V) -> V.

If f(V) is the zero value of K, nothing is added to the map.

Duplicate values of type K will result in a single map entry.

Returns error the first time f returns error.

Types

type Indexed added in v1.32.0

type Indexed[T any] struct {
	Value T
	Index int
}

Indexed is a value that had an index within a slice.

func ToIndexed added in v1.32.0

func ToIndexed[T any](s []T) []Indexed[T]

ToIndexed indexes the slice.

type Ordered

type Ordered interface {
	~int | ~int8 | ~int16 | ~int32 | ~int64 |
		~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr |
		~float32 | ~float64 |
		~string
}

Ordered matches cmp.Ordered until we only support Go versions >= 1.21.

TODO FUTURE: remove and replace with cmp.Ordered when we only support Go versions >= 1.21.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL