Goterators

Built with WeBuild Go Reference

goterators-Thumbnail

Requirement

  • Go 1.18

Installation

This assumes you already have a working Go environment.

Use Go get to pull goterators for using

go get github.com/ledongthuc/goterators

Usage

Import the package goterators into your project before using.

import "github.com/ledongthuc/goterators"

Functions

For-each

goterators-ForEach

  • For-each function act the same for in Go. Just another option to loop through items in a list.

ForEach(list1, func(item int) {
  // handle each item in the list
})

ForEach(list2, func(item string) {
  // handle each item in the list
})

ForEach(list3, func(item MyStruct) {
  // handle each item in the list
})

Find

goterators-Find

  • Find function return first element and its index in the list that meets function condition. In case no element meet the condition function, return the error “Not Found”.

matchedInt, index, err := Find(list, func(item int) bool {
  return item == 1
})

matchedString, index, err := Find(list, func(item string) bool {
  return item == "searching text"
})

matchedStruct, index, err := Find(list, func(item MyStruct) bool {
  return item == searchingStruct
})

Exist

goterators-Exist

  • Exist check an existence of element in the list

matchedInt, err := Exist(list, 1)

matchedString, err := Exist(list, "searching string")

matchedStruct, err := Exist(list, SearchingStruct)

Reduce

goterators-Reduce

  • Similar to Fold Left, Reduce function run the reducer function on each element of array. In order, the reduce function passes in the return value from calculation on the preceding element. The final result of running the reducer across all elements of the array is the return value of final reducer on last element.
  • Reduce function has 3 parameters:
    • list: source list we want to process.
    • initial value: the previous value that’s used in reducer call of first element. At this time, previous = initial value, current = first element of list.
    • reducer function: the function will run on all elements of source list.

// Sum
total := Reduce(list, 0, func(previous int, current int, index int, list []int) int {
	return previous + current
})

// Mapping ints to floats
items := Reduce(testSource, []float64{}, func(previous []float64, current int, index int, list []int) []float64 {
	return append(previous, float64(current))
})

Reduce right

goterators-Reduce right

  • Similar to Fold Right, Reduce function run the reducer function on each element of array, from last to first element. In order, the reduce function passes in the return value from calculation on the preceding element. The final result of running the reducer across all elements of the array is the return value of final reducer on first element.
  • Reduce function has 3 parameters:
    • list: source list we want to process.
    • initial value: the previous value that’s used in reducer call of last element. At this time, previous = initial value, current = last element of list.
    • reducer function: the function will run on all elements of source list.

// Reverse
reversedList := Reduce(list, []string{}, func(previous []string, current string, index int, list []string) []string {
  return append(list, current)
})

Filter

goterators-Filter

  • Filter function filters items that meets function condition

filteredItems, err := Filter(list, func(item int) bool {
  return item % 2 == 0
})

filteredItems, err := Filter(list, func(item string) bool {
  return item.Contains("ValidWord")
})

filteredItems, err := Filter(list, func(item MyStruct) bool {
  return item.Valid()
})

Map

goterators-Map

  • Map function convert items in the list to output list

mappedItems := Map(testSource, func(item int64) float64 {
  return float64(item)
})

prices := Map(testSource, func(item Order) Price {
  return item.GetPrice()
})

Every

goterators-Every

  • Every function check all elements in the list meet the condition, return true. Otherwise, return false.

valid := Every(list, func(item int) bool { item % 2 == 0 }) 

valid := Every(list, func(item string) bool { len(item) < 20 }) 

Some

goterators-Some

  • Some function check at least one element in the list meet the condition; return true, or return false if all elements don’t meet the condition.

valid := Some(list, func(item int) bool { item % 2 == 0 }) 

valid := Some(list, func(item string) bool { len(item) < 20 }) 

Group

goterators-Group

  • Group function group elements into nested list by group condition.

groups := Group(list, func(item Product) groupKey {
   return item.ComposeGroupKey()
}) // Group contains [ [ Product1, Product2, Product3 ], [ Product4, Product5 ] ]

Flat

goterators-Flat

  • Flat function return new array with all sub-array elements concatenated with 1 level depth.
output := Flat([][]int{{1,2}, {3}}) // output = {1,2,3}

License

MIT

Contribution

All your contributions to project and make it better, they are welcome. Feel free to reach me https://thuc.space or create an issue to start it.

Thanks! ?

GitHub

View Github