Skip to content

A collection of higher order functions and some utility functions like itertools

License

Notifications You must be signed in to change notification settings

go-batteries/slicendice

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

slice and dice

A collection of commonly used higher order functions and data structures in go, like itertools.

  • Map
  • Filter
  • Reduce
  • Some
  • Every
  • Take
  • Permute
  • NextPermute
  • PermuteOrdered
  • Combine
  • Zip
  • ZipPairs
  • Batch
  • Join
  • Curry
  • RepeatFunc
  • Splice
  • At, supports both positive and negative index

Lazy:

  • Iter
  • Map
  • Filter
  • Reduce

Extra datastrcutures:

  • Set

Example

Although most of them are covered in _test.go, here is brief rundown.

package main

import (
    "github.com/go-batteries/slicendice"
    "github.com/go-batteries/slicendice/lazy"
)

func main() {
    inputs := []int{1, 2, 3, 5}
    inputIter := lazy.ToSliceIter(inputs)

    adder := func(el int, _ int) int {
        return el + 1
    }

    evening := func(el int, _ int) bool {
        return el % 2 == 0
    }

    increments := slicendice.Map(inputs, adder)
    // returns []int{2,3,4,6}

    evens := slicendice.Filter(increments, evening)
    // return []int{2, 4, 6}

    iter := lazy.MapIntoIter(inputs, adder)
    // returns an iterator with Next()
    // or you could also do

    // iter := lazy.Map(inputIter, adder)

    // iterate
    for ok, res := iter.Next(); ok; ok, res = iter.Next() {
        // do something with result
    }

    // for a chained usecase
    // add one and filter evens
    // and take first 5
    inputs = []int{1,2,3,4,5,6,7,8,9}
    
    mapper := lazy.Map(lazy.ToSliceIter(inputs), adder)
    filterr := lazy.Filter(mapper, evening)

    iter2 := lazy.Take(5, filterr)
    // or
    iter2 = lazy.Take(5, lazy.Filter(lazy.Map(inputIter, added), evening))
}

About

A collection of higher order functions and some utility functions like itertools

Resources

License

Stars

Watchers

Forks

Packages

No packages published