uarray

package
v1.28.1 Latest Latest
Warning

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

Go to latest
Published: Jul 25, 2025 License: MIT Imports: 7 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AllMatch added in v1.16.8

func AllMatch[T any](values []T, predicate func(v *T) bool) bool

AllMatch checks if all slice elements match the predicate. Returns true if all elements match the predicate, false otherwise.

func AnyMatch

func AnyMatch[T any](values []T, predicate func(v *T) bool) bool

AnyMatch checks if slice has an element that matches predicate. Returns true if there's a match, false otherwise.

func AsString added in v1.20.0

func AsString[T uconst.Stringable](delimiter string, values ...T) string

AsString converts any supported numeric value to a string and joins them with the specified delimiter.

func BestMatchBy added in v1.19.1

func BestMatchBy[T any](values []T, predicate func(currentBest, candidate *T) bool) *T

BestMatchBy iterates over the slice and selects the element that satisfies the predicate function as the best match. The predicate function compares the current best match with the candidate and determines if the candidate is better. Returns a pointer to the selected element or nil if the slice is empty.

func CollectAsMap

func CollectAsMap[K comparable, V, R any](values []V, key func(v *V) K, val func(v V) R) map[K]R

CollectAsMap collects corresponding values to a map.

func Contains

func Contains[V comparable](values []V, val V) int

Contains checks if slice contains specified element. Returns its index if found, -1 otherwise.

func ContainsAny

func ContainsAny[V comparable](from []V, values ...V) int

ContainsAny checks if slice contains any element from another slice. Returns its index if found, -1 otherwise.

func ContainsPredicate

func ContainsPredicate[T any](values []T, predicate func(v *T) bool) (int, *T)

ContainsPredicate checks if slice contains specified struct element by using a predicate. Returns its index and value if found, -1 and nil otherwise.

func ContainsStruct

func ContainsStruct[K comparable, V Indexed[K]](values []V, val V) (int, *V)

ContainsStruct checks if slice contains specified struct element. Returns its index and value if found, -1 and nil otherwise.

func CopyWithoutIndex

func CopyWithoutIndex[T any](src []T, index int) []T

CopyWithoutIndex copies a slice while ignoring an element at specific index

func CopyWithoutIndexes added in v1.17.4

func CopyWithoutIndexes[T any](src []T, indexes []int) []T

CopyWithoutIndexes copies a slice while ignoring elements at specific indexes. Duplicate values for indexes are ignored.

func EqualValues

func EqualValues[T constraints.Ordered](left []T, right []T) bool

EqualValues compares values of two slices regardless of elements order

func EqualValuesCompare

func EqualValuesCompare[T any](left []T, right []T, compare func(t1, t2 T) bool, less func(t1, t2 T) bool) bool

EqualValuesCompare compares values of two slices regardless of elements order

func EqualsCompareWithOrder

func EqualsCompareWithOrder[T any](left []T, right []T, compare func(t1 T, t2 T) bool) bool

EqualsCompareWithOrder compares two slices taking into consideration elements order

func EqualsWithOrder

func EqualsWithOrder[T comparable](left []T, right []T) bool

EqualsWithOrder compares two slices taking into consideration elements order

func Filter

func Filter[V any](values []V, filter func(v *V) bool) []V

Filter filters values slice and returns a copy with filtered elements matching a predicate. Returns its index if found, -1 otherwise.

func FilterAll

func FilterAll[V any](values []V, filter func(v *V) bool) ([]V, []V)

FilterAll filters values slice and returns a copy with filtered elements matching a predicate and elements that do not match any filter. Returns its index if found, -1 otherwise.

func FilterBySet

func FilterBySet[V comparable](values []V, filter ...V) []V

FilterBySet filters values slice and returns a copy with filtered elements matching values from filter. Returns its index if found, -1 otherwise.

func FilterOut added in v1.10.0

func FilterOut[V any](values []V, filter func(v *V) bool) []V

FilterOut is a macros to Filter, so it acts like Filter, but filters out values. That means that only values not matching the filter will be returned.

func FilterOutBySet added in v1.18.1

func FilterOutBySet[V comparable](values []V, filter ...V) []V

FilterOutBySet filters out values slice and returns a copy without filtered elements matching values from filter. Returns its index if found, -1 otherwise.

func Find

func Find[V any](values []V, filter func(v *V) bool) *V

Find finds the first match in a slice using simple looping.

func FindBinary added in v1.25.0

func FindBinary[V any](values []V, filter func(v *V) bool) *V

FindBinary finds the first match in a sorted slice using binary search. The filter function should implement a comparison suitable for binary search.

func Flat

func Flat[V any](values [][]V) []V

Flat flattens the stream (slice).

func FlatMap

func FlatMap[V, R any](values [][]V, m func(v *V) R) []R

FlatMap applies the Map method and the Flat method consequently.

func GroupBy

func GroupBy[V any, G comparable](values []V, group func(v *V) G, aggregator func(v1, v2 *V) V) []V

GroupBy groups and aggregates elements with aggregator method func

func GroupToMapBy

func GroupToMapBy[V any, G comparable](values []V, group func(v *V) G) map[G][]V

GroupToMapBy groups elements with group method func

func Has added in v1.18.1

func Has[T comparable](values []T, val T) bool

Has checks if slice has an element. Returns true if there's a match, false otherwise.

func IndexOfUint32

func IndexOfUint32(slice []uint32, value uint32) int

func Map

func Map[V, R any](values []V, m func(v *V) R) []R

Map maps a func and returns a result.

func MapAggr

func MapAggr[V, R any](values []V, aggr func(v *V) []R) []R

MapAggr maps a func to each set of elements and returns an aggregated result.

func MapAndGroupToMapBy added in v1.18.4

func MapAndGroupToMapBy[V any, G comparable, R any](values []V, group func(v *V) (G, R)) map[G][]R

MapAndGroupToMapBy same as GroupToMapBy, but allows elements to be mapped to a different type.

func Merge

func Merge[K comparable, T any](t1 []T, t2 []T, key func(t *T) K) []T

Merge merges two slices with t1 elements prioritized against elements of t2.

func Range added in v1.10.0

func Range[T uconst.Integer](from, to T) []T

Range generates a slice of integers from 'from' to 'to' (exclusive). The type T must be an integer type (e.g., int, int64, uint, etc.). The returned slice includes 'from', but is exclusive to 'to'. Example usage: FromRange(1, 5) returns []int{1, 2, 3, 4}.

func RangeWithStep added in v1.10.0

func RangeWithStep(from, to, step int) []int

RangeWithStep generates a slice of integers starting from 'from' up to and including 'to' with a specified step. The 'from' argument specifies the starting value (inclusive). The 'to' argument specifies the ending value (inclusive). The 'step' argument specifies the interval between generated elements. The function returns a slice of integers with elements generated using the specified step. Example usage: result := uarray.RangeWithStep(1, 9, 2) generates []int{1, 3, 5, 7, 9}. Example usage: result := uarray.RangeWithStep(1, 9, 100) generates []int{1, 101} when step > range.

Note: The 'to' argument is inclusive to ensure that the last element specified by 'to' is included in the result. When the 'step' value is larger than the range (i.e., 'to - from'), the function generates a slice with only two elements: the starting value 'from' and the incremented value 'from + step'. This behavior is intentional to handle cases where the step is larger than the range and still provide a predictable result.

func SortFind added in v1.10.0

func SortFind[V any](values []V, less func(a, b V) bool, filter func(*V) bool) *V

SortFind sorts the given slice using the provided less function and then finds the first match using a binary search with the filter function. This approach is efficient for large slices and repeated searches, as it leverages the speed of binary search. NOTE: please note that the original slice will be modified.

Parameters:

  • values: the slice of elements to search through.
  • less: a function that defines the order of elements for sorting.
  • filter: a function that tests each element to find a match.

Returns:

  • A pointer to the found element, or nil if no match is found.

func Split added in v1.19.3

func Split[T any](slice []T, chunkSize int) [][]T

Split divides a slice into multiple smaller slices (chunks) of a specified size and returns a slice of these chunks.

If chunkSize is less than or equal to zero, the function returns a slice containing the original slice as its only element. If the length of the input slice isn't perfectly divisible by chunkSize, the last chunk will contain the remaining elements.

Example:

input:    []int{1, 2, 3, 4, 5}, chunkSize: 2
output:   [][]int{{1, 2}, {3, 4}, {5}}

Type Parameters:

T - The type of elements in the slice.

Parameters:

slice - The input slice to be split.
chunkSize - The desired size of each chunk.

Returns:

A two-dimensional slice where each inner slice is a chunk of the original slice.

func ToMap

func ToMap[V any, K comparable, R any](values []V, m func(v *V) (K, R)) map[K]R

ToMap collects elements of a slice into a map using a collector function. Note:

If the mapping function produces the same key for multiple elements, the resulting
map will contain only the last value associated with that key, as the map does not
behave like a multimap. Each key in the returned map corresponds to a single value,
and any previous value for the same key will be overwritten.

func ToMultiMap

func ToMultiMap[V any, K comparable, R any](values []V, m func(v *V) (K, R)) map[K][]R

ToMultiMap collects a stream using collector func to a multimap.

func Uniq

func Uniq[V any, F comparable](values []V, getter func(v *V) F) []V

Uniq filters unique elements by predicate that returns any comparable value

func Unique added in v1.24.0

func Unique[V comparable](values []V, transform ...func(v *V) V) []V

Unique filters unique elements from a slice.

The function accepts an optional list of transform functions. Each transform function can modify the elements before comparing them. If no transform functions are provided, elements are compared directly.

Parameters: - values: The slice of comparable elements to filter. - transform: A variadic list of functions that take a pointer to a value and return the transformed value. All transform functions are applied in provided order.

Returns: - A slice of unique elements from the input, based on the provided transform functions (if any).

Example:

values := []int{1, 2, 2, 3, 4, 4}
uniqueValues := Unique(values) // Output: [1, 2, 3, 4]

// Using a transform function to compare absolute values
valuesWithNegatives := []int{-1, 1, -2, 2, 3}
uniqueAbsValues := Unique(valuesWithNegatives, func(v *int) int { return abs(*v) })
// Output: [-1, -2, 3]

Types

type Indexed

type Indexed[T any] interface {
	GetIndex() T
}

type Pair

type Pair[L any, R any] struct {
	Left  L
	Right R
}

func NewPair

func NewPair[L any, R any](left L, right R) *Pair[L, R]

Jump to

Keyboard shortcuts

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