v2 – github.com/deckarep/golang-set/v2 Index | Files

package mapset

import "github.com/deckarep/golang-set/v2"

Package mapset implements a simple and set collection. Items stored within it are unordered and unique. It supports typical set operations: membership testing, intersection, union, difference, symmetric difference and cloning.

Package mapset provides two implementations of the Set interface. The default implementation is safe for concurrent access, but a non-thread-safe implementation is also provided for programs that can benefit from the slight speed improvement and that can enforce mutual exclusion through other means.

Index

Functions

func Elements

func Elements[T comparable](s Set[T]) func(func(element T) bool)

Elements returns an iterator that yields the elements of the set. Starting with Go 1.23, users can use a for loop to iterate over it.

func Sorted

func Sorted[E cmp.Ordered](set Set[E]) []E

Sorted returns a sorted slice of a set of any ordered type in ascending order. When sorting floating-point numbers, NaNs are ordered before other values.

Types

type Iterator

type Iterator[T comparable] struct {
	C <-chan T
	// contains filtered or unexported fields
}

Iterator defines an iterator over a Set, its C channel can be used to range over the Set's elements.

func (*Iterator[T]) Stop

func (i *Iterator[T]) Stop()

Stop stops the Iterator, no further elements will be received on C, C will be closed.

type Set

type Set[T comparable] interface {
	// Add adds an element to the set. Returns whether
	// the item was added.
	Add(val T) bool

	// Append multiple elements to the set. Returns
	// the number of elements added.
	Append(val ...T) int

	// Cardinality returns the number of elements in the set.
	Cardinality() int

	// Clear removes all elements from the set, leaving
	// the empty set.
	Clear()

	// Clone returns a clone of the set using the same
	// implementation, duplicating all keys.
	Clone() Set[T]

	// Contains returns whether the given items
	// are all in the set.
	Contains(val ...T) bool

	// ContainsOne returns whether the given item
	// is in the set.
	//
	// Contains may cause the argument to escape to the heap.
	// See: https://github.com/deckarep/golang-set/issues/118
	ContainsOne(val T) bool

	// ContainsAny returns whether at least one of the
	// given items are in the set.
	ContainsAny(val ...T) bool

	// ContainsAnyElement returns whether at least one of the
	// given element are in the set.
	ContainsAnyElement(other Set[T]) bool

	// Difference returns the difference between this set
	// and other. The returned set will contain
	// all elements of this set that are not also
	// elements of other.
	//
	// Note that the argument to Difference
	// must be of the same type as the receiver
	// of the method. Otherwise, Difference will
	// panic.
	Difference(other Set[T]) Set[T]

	// Equal determines if two sets are equal to each
	// other. If they have the same cardinality
	// and contain the same elements, they are
	// considered equal. The order in which
	// the elements were added is irrelevant.
	//
	// Note that the argument to Equal must be
	// of the same type as the receiver of the
	// method. Otherwise, Equal will panic.
	Equal(other Set[T]) bool

	// Intersect returns a new set containing only the elements
	// that exist only in both sets.
	//
	// Note that the argument to Intersect
	// must be of the same type as the receiver
	// of the method. Otherwise, Intersect will
	// panic.
	Intersect(other Set[T]) Set[T]

	// IsEmpty determines if there are elements in the set.
	IsEmpty() bool

	// IsProperSubset determines if every element in this set is in
	// the other set but the two sets are not equal.
	//
	// Note that the argument to IsProperSubset
	// must be of the same type as the receiver
	// of the method. Otherwise, IsProperSubset
	// will panic.
	IsProperSubset(other Set[T]) bool

	// IsProperSuperset determines if every element in the other set
	// is in this set but the two sets are not
	// equal.
	//
	// Note that the argument to IsSuperset
	// must be of the same type as the receiver
	// of the method. Otherwise, IsSuperset will
	// panic.
	IsProperSuperset(other Set[T]) bool

	// IsSubset determines if every element in this set is in
	// the other set.
	//
	// Note that the argument to IsSubset
	// must be of the same type as the receiver
	// of the method. Otherwise, IsSubset will
	// panic.
	IsSubset(other Set[T]) bool

	// IsSuperset determines if every element in the other set
	// is in this set.
	//
	// Note that the argument to IsSuperset
	// must be of the same type as the receiver
	// of the method. Otherwise, IsSuperset will
	// panic.
	IsSuperset(other Set[T]) bool

	// Each iterates over elements and executes the passed func against each element.
	// If passed func returns true, stop iteration at the time.
	Each(func(T) bool)

	// Iter returns a channel of elements that you can
	// range over.
	Iter() <-chan T

	// Iterator returns an Iterator object that you can
	// use to range over the set.
	Iterator() *Iterator[T]

	// Remove removes a single element from the set.
	Remove(i T)

	// RemoveAll removes multiple elements from the set.
	RemoveAll(i ...T)

	// String provides a convenient string representation
	// of the current state of the set.
	String() string

	// SymmetricDifference returns a new set with all elements which are
	// in either this set or the other set but not in both.
	//
	// Note that the argument to SymmetricDifference
	// must be of the same type as the receiver
	// of the method. Otherwise, SymmetricDifference
	// will panic.
	SymmetricDifference(other Set[T]) Set[T]

	// Union returns a new set with all elements in both sets.
	//
	// Note that the argument to Union must be of the
	// same type as the receiver of the method.
	// Otherwise, Union will panic.
	Union(other Set[T]) Set[T]

	// Pop removes and returns an arbitrary item from the set.
	Pop() (T, bool)

	// ToSlice returns the members of the set as a slice.
	ToSlice() []T

	// MarshalJSON will marshal the set into a JSON-based representation.
	MarshalJSON() ([]byte, error)

	// UnmarshalJSON will unmarshal a JSON-based byte slice into a full Set datastructure.
	// For this to work, set subtypes must implemented the Marshal/Unmarshal interface.
	UnmarshalJSON(b []byte) error
}

Set is the primary interface provided by the mapset package. It represents an unordered set of data and a large number of operations that can be applied to that set.

func NewSet

func NewSet[T comparable](vals ...T) Set[T]

NewSet creates and returns a new set with the given elements. Operations on the resulting set are thread-safe.

func NewSetFromMapKeys

func NewSetFromMapKeys[T comparable, V any](val map[T]V) Set[T]

NewSetFromMapKeys creates and returns a new set with the given keys of the map. Operations on the resulting set are thread-safe.

func NewSetWithSize

func NewSetWithSize[T comparable](cardinality int) Set[T]

NewSetWithSize creates and returns a reference to an empty set with a specified capacity. Operations on the resulting set are thread-safe.

func NewThreadUnsafeSet

func NewThreadUnsafeSet[T comparable](vals ...T) Set[T]

NewThreadUnsafeSet creates and returns a new set with the given elements. Operations on the resulting set are not thread-safe.

func NewThreadUnsafeSetFromMapKeys

func NewThreadUnsafeSetFromMapKeys[T comparable, V any](val map[T]V) Set[T]

NewThreadUnsafeSetFromMapKeys creates and returns a new set with the given keys of the map. Operations on the resulting set are not thread-safe.

func NewThreadUnsafeSetWithSize

func NewThreadUnsafeSetWithSize[T comparable](cardinality int) Set[T]

NewThreadUnsafeSetWithSize creates and returns a reference to an empty set with a specified capacity. Operations on the resulting set are not thread-safe.

Source Files

iterator.go set.go sorted.go threadsafe.go threadunsafe.go

Version
v2.8.0 (latest)
Published
Mar 14, 2025
Platform
js/wasm
Imports
6 packages
Last checked
4 days ago

Tools for package owners.