snm

package
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Nov 21, 2024 License: MIT Imports: 4 Imported by: 4

Documentation

Overview

Package snm provides convenience functions for slices and maps.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func At

func At[T any, I constraints.Integer](t []T, at []I) []T

At returns the elements of t at the indexes in at.

func Cast added in v0.5.0

func Cast[TO Number, FROM Number](s []FROM) []TO

Cast casts each element in the slice.

func CompareReverse added in v0.4.0

func CompareReverse[T constraints.Ordered](a, b T) int

CompareReverse orders values from big to small. Should be generally used as a parameter, not called.

func FilterMap

func FilterMap[K comparable, V any](m map[K]V, keep func(k K, v V) bool) map[K]V

FilterMap returns a new map containing only the elements for which keep returns true.

func FilterSlice

func FilterSlice[S any](s []S, keep func(S) bool) []S

FilterSlice returns a new slice containing only the elements for which keep returns true.

func MapToMap

func MapToMap[K comparable, V any, K2 comparable, V2 any](
	m map[K]V, f func(K, V) (K2, V2)) map[K2]V2

MapToMap returns a map containing the results of applying f to the key-value pairs of m. f should return a new key-value pair for the new map. Keys that appear more than once will override each other.

func Slice

func Slice[T any](n int, f func(int) T) []T

Slice returns a new slice of size n whose values are the results of applying f on each index.

func SliceToSlice

func SliceToSlice[A any, B any](a []A, f func(A) B) []B

SliceToSlice returns a slice of the same length containing the results of applying f to the elements of s.

func Sorted

func Sorted[T constraints.Ordered](s []T) []T

Sorted sorts the input and returns it.

func SortedFunc

func SortedFunc[T any](s []T, cmp func(T, T) int) []T

SortedFunc sorts the input and returns it.

func SortedKeys added in v0.5.0

func SortedKeys[K comparable, V constraints.Ordered](
	m map[K]V) []K

SortedKeys sorts a map's keys according to their values' natural order.

Example
ages := map[string]int{
	"Alice":   30,
	"Bob":     20,
	"Charlie": 25,
}
for _, name := range SortedKeys(ages) {
	fmt.Printf("%s: %d\n", name, ages[name])
}
Output:

Bob: 20
Charlie: 25
Alice: 30

func SortedKeysFunc added in v0.5.0

func SortedKeysFunc[K comparable, V constraints.Ordered](
	m map[K]V, cmp func(V, V) int) []K

SortedKeysFunc sorts a map's keys by comparing their values.

Example (Reverse)
ages := map[string]int{
	"Alice":   30,
	"Bob":     20,
	"Charlie": 25,
}
// Sort by reverse natural order.
for _, name := range SortedKeysFunc(ages, CompareReverse) {
	fmt.Printf("%s: %d\n", name, ages[name])
}
Output:

Alice: 30
Charlie: 25
Bob: 20

Types

type CapMap added in v0.6.0

type CapMap[K comparable, V any] struct {
	// contains filtered or unexported fields
}

CapMap is a wrapper over a regular map, for reusing maps in order to reduce garbage generation. The allocated memory for the map is expanded and shrunk as needed.

Example
data := [][]string{
	{"a", "b", "c", "a", "b", "b"},
	// ...
}
counter := NewCapMap[string, int]()
for _, x := range data {
	m := counter.Map()
	countValues(x, m)

	// Do something with m.
	j, _ := json.Marshal(m)
	fmt.Println(string(j))
	counter.Clear()
}
Output:

{"a":2,"b":3,"c":1}

func NewCapMap added in v0.6.0

func NewCapMap[K comparable, V any]() *CapMap[K, V]

func (*CapMap[K, V]) Clear added in v0.6.0

func (s *CapMap[K, V]) Clear()

Clear clears the contents of this map, reducing its capacity if needed. May change which object is returned by Map.

func (*CapMap[K, V]) Map added in v0.6.0

func (s *CapMap[K, V]) Map() map[K]V

Map returns the underlying map for regular use.

type DefaultMap

type DefaultMap[K comparable, V any] struct {
	M map[K]V   // Underlying map. Can be safely read from and written to.
	F func(K) V // Generator function.
}

DefaultMap wraps a map with a function that generates values for missing keys.

func NewDefaultMap

func NewDefaultMap[K comparable, V any](f func(K) V) DefaultMap[K, V]

NewDefaultMap returns an empty map with the given function as the missing value generator.

func (DefaultMap[K, V]) Get

func (m DefaultMap[K, V]) Get(k K) V

Get returns the value associated with key k. If k is missing from the map, the generator function is called with k and the result becomes k's value.

func (DefaultMap[K, V]) Set

func (m DefaultMap[K, V]) Set(k K, v V)

Set sets v as k's value.

type Enumerator added in v0.6.0

type Enumerator[T comparable] map[T]int

Enumerator enumerates values by their order of appearance.

func (Enumerator[T]) Elements added in v0.6.0

func (e Enumerator[T]) Elements() []T

Elements returns the enumerated elements, by order of appearance.

func (Enumerator[T]) IndexOf added in v0.6.0

func (e Enumerator[T]) IndexOf(t T) int

IndexOf returns the index of t, possibly allocating a new one.

Equal values always have the same index, while different values always have different indexes. Indexes are sequential.

type Number added in v0.5.0

type Number interface {
	constraints.Integer | constraints.Float
}

Number is an integer or a float.

type Queue added in v0.6.0

type Queue[T any] struct {
	// contains filtered or unexported fields
}

Queue is a memory-efficient FIFO container.

func (*Queue[T]) Dequeue added in v0.6.0

func (q *Queue[T]) Dequeue() T

Dequeue removes and returns the next element in the queue. Panics if the queue is empty.

func (*Queue[T]) Enqueue added in v0.6.0

func (q *Queue[T]) Enqueue(x T)

Enqueue inserts an element to the queue.

func (*Queue[T]) Len added in v0.6.0

func (q *Queue[T]) Len() int

Len return the current number of elements in the queue.

func (*Queue[T]) Peek added in v0.6.0

func (q *Queue[T]) Peek() T

Peek returns the next element in the queue, without modifying its contents. Panics if the queue is empty.

Jump to

Keyboard shortcuts

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