Documentation
¶
Overview ¶
Package reducer provides a few often used Reducers for iterator.Reduce
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Count ¶ added in v0.0.4
Count increases acc on each call, effectively counting the number of inputs.
Example ¶
package main import ( "fmt" "github.com/KrischanCS/go-toolbox/iterator" "github.com/KrischanCS/go-toolbox/iterator/reducer" ) func main() { i := iterator.Of("a,", "b", "c", "d", "e") count := 0 iterator.Reduce(i, &count, reducer.Count) fmt.Println(count) }
Output: 5
func GroupBy ¶
func GroupBy[KEY comparable, IN any](keyFunc func(IN) KEY) iterator.Reducer[map[KEY][]IN, IN]
GroupBy creates a iterator.Reducer which groups the given inputs by the result of the given keyFunc.
Example ¶
package main import ( "fmt" "github.com/KrischanCS/go-toolbox/iterator" "github.com/KrischanCS/go-toolbox/iterator/reducer" ) func main() { type person struct { name string age int } persons := iterator.Of( person{"Alice", 30}, person{"Bob", 2}, person{"Charlie", 13}, person{"Dory", 25}, person{"Edward", 8}, person{"Fiona", 2}, person{"Greg", 5}, ) keyFunc := func(p person) string { switch { case p.age < 3: return "toddler" case p.age < 13: return "child" case p.age < 18: return "teen" default: return "adult" } } groups := make(map[string][]person) iterator.Reduce(persons, &groups, reducer.GroupBy(keyFunc)) // Print results in a deterministic order for _, category := range []string{"toddler", "child", "teen", "adult"} { if people, exists := groups[category]; exists { fmt.Printf("%s: %+v\n", category, people) } } }
Output: toddler: [{name:Bob age:2} {name:Fiona age:2}] child: [{name:Edward age:8} {name:Greg age:5}] teen: [{name:Charlie age:13}] adult: [{name:Alice age:30} {name:Dory age:25}]
func Join ¶
Join creates a iterator.Reducer which joins all given strings with the given separator.
Example ¶
package main import ( "fmt" "strings" "github.com/KrischanCS/go-toolbox/iterator" "github.com/KrischanCS/go-toolbox/iterator/reducer" ) func main() { i := iterator.Of("a", "b", "c") var sb strings.Builder iterator.Reduce(i, &sb, reducer.Join(", ")) fmt.Println(sb.String()) }
Output: a, b, c
func Product ¶
func Product[T constraints.RealNumber](acc *T, in T)
Product multiplies acc by input.
Example ¶
package main import ( "fmt" "github.com/KrischanCS/go-toolbox/iterator" "github.com/KrischanCS/go-toolbox/iterator/reducer" ) func main() { i := iterator.Of(3, 4) product := 1 iterator.Reduce(i, &product, reducer.Product) fmt.Println(product) }
Output: 12
func Sum ¶
func Sum[T constraints.RealNumber](acc *T, in T)
Sum adds the given value to acc.
Example ¶
package main import ( "fmt" "github.com/KrischanCS/go-toolbox/iterator" "github.com/KrischanCS/go-toolbox/iterator/reducer" ) func main() { i := iterator.Of(1, 2, 3, 4, 5) sum := 0 iterator.Reduce(i, &sum, reducer.Sum) fmt.Println(sum) }
Output: 15
Types ¶
This section is empty.
Directories
¶
Path | Synopsis |
---|---|
Package statistics provides reducers for gathering statistics from an iterator.
|
Package statistics provides reducers for gathering statistics from an iterator. |
Click to show internal directories.
Click to hide internal directories.