Golang's "missing" iterator/sequence functions.
With(...T) iter.Seq[T]: Construct a sequence using the provided valuesFromChan(<-chan T) iter.Seq[T]: Returns a sequence that produces values until the channel is closedFromChanCtx(context.Context, <-chan T) iter.Seq[T]: Like FromChan but also stops when the context is canceledRepeat(int, T) iter.Seq[T]: Returns a sequence which repeats the value n times
WithKV(...KV[K,V]) iter.Seq2[K,V]: Construct a key-value sequence using the provided key-valuesRepeatKV(int, K, V) iter.Seq2[K,V]: Returns a sequence which repeats the key-value pair n times
ToChan(iter.Seq[T]) <-chan T: Returns a channel that produces values until the sequence is exhaustedToChanCtx(context.Context, iter.Seq[T]) <-chan T: Returns a channel that produces values until the sequence is exhausted or the context is canceledIterKV(iter.Seq[V], func(V) K) iter.Seq2[K,V]: Converts an iter.Seq[V] to an iter.Seq2[K,V] using keyFn for keysIterK(iter.Seq2[K,V]) iter.Seq[K]: Converts an iter.Seq2[K,V] to an iter.Seq[K] (keys only)IterV(iter.Seq2[K,V]) iter.Seq[V]: Converts an iter.Seq2[K,V] to an iter.Seq[V] (values only)MapToKV(iter.Seq[T], func(T) (K,V)) iter.Seq2[K,V]: Maps values to key-value pairsSwapKV(iter.Seq2[K,V]) iter.Seq2[V,K]: Swaps the keys and values of each pairEnumerate(iter.Seq[T]) iter.Seq2[int,T]: Pairs each value with its 0-based index; the index restarts on each iteration
Map(iter.Seq[T], func(T) O) iter.Seq[O]: Maps the items in the sequence to another typeMapKV(iter.Seq2[K,V], func(K,V) (K1,V1)) iter.Seq2[K1,V1]: Maps the key-value pairs to other typesFlatMap(iter.Seq[T], func(T) iter.Seq[O]) iter.Seq[O]: Maps each value to a sequence and yields the elements of each in orderScan(iter.Seq[T], O, func(O,T) O) iter.Seq[O]: Like Reduce but lazily yields the accumulated value after each elementScanKV(iter.Seq2[K,V], O, func(O,K,V) O) iter.Seq[O]: Like ReduceKV but lazily yields the accumulated value after each pairTap(iter.Seq[T], func(T)) iter.Seq[T]: Yields the same elements, calling the function on each as it passes throughTapKV(iter.Seq2[K,V], func(K,V)) iter.Seq2[K,V]: Yields the same pairs, calling the function on each as it passes through
Filter(iter.Seq[T], func(T) bool) iter.Seq[T]: Filter values by applying fn to each valueFilterKV(iter.Seq2[K,V], func(K,V) bool) iter.Seq2[K,V]: Filter key-value pairs by applying fn to each pair
Append(iter.Seq[T], ...T) iter.Seq[T]: Returns a new sequence with additional items appendedAppendKV(iter.Seq2[K,V], ...KV[K,V]) iter.Seq2[K,V]: Returns a new sequence with additional key-value pairs appended
Concat(...iter.Seq[T]) iter.Seq[T]: Yields the elements of each sequence in orderConcatKV(...iter.Seq2[K,V]) iter.Seq2[K,V]: Yields the key-value pairs of each sequence in orderZip(iter.Seq[A], iter.Seq[B]) iter.Seq2[A,B]: Pairs the elements of two sequences positionally, ending at the shorter oneMerge(iter.Seq[T], iter.Seq[T]) iter.Seq[T]: Merges two sorted sequences into one sorted sequenceMergeFunc(iter.Seq[T], iter.Seq[T], func(T,T) int) iter.Seq[T]: Like Merge but uses a comparison function
Cycle(iter.Seq[T]) iter.Seq[T]: Repeats the sequence forever (empty input yields an empty sequence)CycleKV(iter.Seq2[K,V]) iter.Seq2[K,V]: Repeats the key-value sequence forever (empty input yields an empty sequence)
Replace(iter.Seq[T], old, new T) iter.Seq[T]: Replace old values with new valuesReplaceKV(iter.Seq2[K,V], old, new KV[K,V]) iter.Seq2[K,V]: Replace old key-value pairs with new ones
Compact(iter.Seq[T]) iter.Seq[T]: Yields all values that are not equal to the previous valueCompactFunc(iter.Seq[T], func(T,T) bool) iter.Seq[T]: Like Compact but uses a function to compare elementsCompactKV(iter.Seq2[K,V]) iter.Seq2[K,V]: Yields all key-value pairs that are not equal to the previous pairCompactKVFunc(iter.Seq2[K,V], func(KV[K,V], KV[K,V]) bool) iter.Seq2[K,V]: Like CompactKV but uses a function to compare pairsUnique(iter.Seq[T]) iter.Seq[T]: Yields the first occurrence of each distinct value (removes duplicates anywhere, not just adjacent)UniqueKV(iter.Seq2[K,V]) iter.Seq2[K,V]: Yields the first occurrence of each distinct key-value pair
Chunk(iter.Seq[T], int) iter.Seq[iter.Seq[T]]: Chunk the sequence into chunks of specified sizeChunkKV(iter.Seq2[K,V], int) iter.Seq[iter.Seq2[K,V]]: Chunk key-value pairs into chunks of specified sizeWindows(iter.Seq[T], int) iter.Seq[iter.Seq[T]]: Overlapping windows of the specified size (sliding by one element)WindowsKV(iter.Seq2[K,V], int) iter.Seq[iter.Seq2[K,V]]: Overlapping windows of key-value pairsFlatten(iter.Seq[iter.Seq[T]]) iter.Seq[T]: Yields the elements of each inner sequence in order (the inverse of Chunk)FlattenKV(iter.Seq[iter.Seq2[K,V]]) iter.Seq2[K,V]: Yields the key-value pairs of each inner sequence in order (the inverse of ChunkKV)
GroupBy(iter.Seq[T], func(T) K) iter.Seq2[K,[]T]: Groups values by key in first-seen orderPartition(iter.Seq[T], func(T) bool) (iter.Seq[T], iter.Seq[T]): Splits into matching and non-matching sequencesPartitionKV(iter.Seq2[K,V], func(K,V) bool) (iter.Seq2[K,V], iter.Seq2[K,V]): Splits key-value pairs into matching and non-matching sequences
Take(iter.Seq[T], int) iter.Seq[T]: Take the first n elements of the sequenceTakeKV(iter.Seq2[K,V], int) iter.Seq2[K,V]: Take the first n key-value pairs of the sequenceTakeWhile(iter.Seq[T], func(T) bool) iter.Seq[T]: Take leading elements while the function returns trueTakeKVWhile(iter.Seq2[K,V], func(K,V) bool) iter.Seq2[K,V]: Take leading key-value pairs while the function returns true
Drop(iter.Seq[T], int) iter.Seq[T]: Drop n elements from the start of the sequenceDropKV(iter.Seq2[K,V], int) iter.Seq2[K,V]: Drop n key-value pairs from the start of the sequenceDropBy(iter.Seq[T], func(T) bool) iter.Seq[T]: Drop all elements for which the function returns trueDropKVBy(iter.Seq2[K,V], func(K,V) bool) iter.Seq2[K,V]: Drop all key-value pairs for which the function returns trueDropWhile(iter.Seq[T], func(T) bool) iter.Seq[T]: Drop leading elements while the function returns true, then yield the restDropKVWhile(iter.Seq2[K,V], func(K,V) bool) iter.Seq2[K,V]: Drop leading key-value pairs while the function returns true, then yield the rest
Min(iter.Seq[T]) (T, bool): Min value from the sequence using built-in comparisonMinFunc(iter.Seq[T], func(T,T) int) (T, bool): Min value using a comparison functionMinFuncKV(iter.Seq2[K,V], func(KV[K,V], KV[K,V]) int) (KV[K,V], bool): Min key-value pair using a comparison functionMax(iter.Seq[T]) (T, bool): Max value from the sequence using built-in comparisonMaxFunc(iter.Seq[T], func(T,T) int) (T, bool): Max value using a comparison functionMaxFuncKV(iter.Seq2[K,V], func(KV[K,V], KV[K,V]) int) (KV[K,V], bool): Max key-value pair using a comparison function
Reduce(iter.Seq[T], O, func(O,T) O) O: Reduce the sequence to a single valueReduceKV(iter.Seq2[K,V], O, func(O,K,V) O) O: Reduce key-value pairs to a single value
Sum(iter.Seq[T]) T: Sum of the values (zero for an empty sequence); T is any integer or float typeProduct(iter.Seq[T]) T: Product of the values (one for an empty sequence); T is any integer or float typeAverage(iter.Seq[T]) (float64, bool): Arithmetic mean of the values; false if the sequence is empty
Count(iter.Seq[T]) int: Returns the number of elements in the sequenceCountKV(iter.Seq2[K,V]) int: Returns the number of key-value pairs in the sequenceCountBy(iter.Seq[T], func(T) bool) int: Count elements for which the function returns trueCountKVBy(iter.Seq2[K,V], func(K,V) bool) int: Count key-value pairs for which the function returns trueCountValues(iter.Seq[T]) iter.Seq2[T,int]: Returns a sequence where keys are values and values are their counts
Compare(iter.Seq[T], iter.Seq[T]) int: Compare two sequences using cmp.CompareCompareFunc(iter.Seq[T], iter.Seq[T], func(T,T) int) int: Compare two sequences using a comparison functionCompareKV(iter.Seq2[K,V], iter.Seq2[K,V]) int: Compare two key-value sequences using cmp.CompareCompareKVFunc(iter.Seq2[AK,AV], iter.Seq2[BK,BV], func(KV[AK,AV], KV[BK,BV]) int) int: Compare two key-value sequences using a comparison function
Equal(iter.Seq[T], iter.Seq[T]) bool: Returns true if sequences are equalEqualKV(iter.Seq2[K,V], iter.Seq2[K,V]) bool: Returns true if key-value sequences are equalEqualFunc(iter.Seq[T], iter.Seq[T], func(T,T) bool) bool: Test equality using a comparison functionEqualKVFunc(iter.Seq2[AK,AV], iter.Seq2[BK,BV], func(KV[AK,AV], KV[BK,BV]) bool) bool: Test key-value equality using a comparison function
Contains(iter.Seq[T], T) bool: Returns true if the value is in the sequenceContainsKV(iter.Seq2[K,V], K, V) bool: Returns true if the key-value pair is in the sequenceContainsFunc(iter.Seq[T], func(T) bool) bool: Returns true if predicate returns true for any valueContainsKVFunc(iter.Seq2[K,V], func(K,V) bool) bool: Returns true if predicate returns true for any key-value pair
All(iter.Seq[T], func(T) bool) bool: Returns true if the function returns true for every value (true for empty)AllKV(iter.Seq2[K,V], func(K,V) bool) bool: Returns true if the function returns true for every key-value pair (true for empty)None(iter.Seq[T], func(T) bool) bool: Returns true if the function returns false for every value (true for empty)NoneKV(iter.Seq2[K,V], func(K,V) bool) bool: Returns true if the function returns false for every key-value pair (true for empty)
Find(iter.Seq[T], T) (int, bool): Returns the index of the first occurrence of the valueFindBy(iter.Seq[T], func(T) bool) (T, int, bool): Returns the first value for which the function returns trueFindByKey(iter.Seq2[K,V], K) (V, int, bool): Returns the value of the first key-value pair with the given keyFindByValue(iter.Seq2[K,V], V) (K, int, bool): Returns the key of the first key-value pair with the given valueAt(iter.Seq[T], int) (T, bool): Returns the value at the given 0-based index, or zero value and false if out of rangeAtKV(iter.Seq2[K,V], int) (K, V, bool): Returns the key and value at the given 0-based index, or zero values and false if out of rangeLast(iter.Seq[T]) (T, bool): Returns the final value in the sequence, or zero value and false if emptyLastKV(iter.Seq2[K,V]) (K, V, bool): Returns the final key-value pair in the sequence, or zero values and false if empty
Coalesce(iter.Seq[T]) (T, bool): Returns the first non-zero value in the sequenceCoalesceKV(iter.Seq2[K,V]) (KV[K,V], bool): Returns the first key-value pair with a non-zero valueIsSorted(iter.Seq[T]) bool: Returns true if the sequence is sortedIsSortedKV(iter.Seq2[K,V]) bool: Returns true if the key-value sequence is sortedIntK() func(V) int: Returns a function that generates increasing integers starting at 0
EveryUntil(time.Duration, time.Time) iter.Seq[time.Time]: Yields time every duration until the specified timeEveryN(time.Duration, int) iter.Seq[time.Time]: Yields time every duration for n times
KV[K,V]: A struct that pairs a key and value together for use with key-value sequence functionsNumber: A constraint permitting any integer or floating point type, used by Sum, Product, and Average