cartesian

package module
v0.0.0-...-e02d1c1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 21, 2023 License: MIT Imports: 0 Imported by: 16

README

go-cartesian-product

Build Status GoDoc

a package for building cartesian products in golang

keep in mind, that because how golang handles maps your results will not be "in order"

Installation

In order to start, go get this repository:

go get github.com/schwarmco/go-cartesian-product

Usage

import (
    "fmt"
    "github.com/schwarmco/go-cartesian-product"
)

func main() {
    
    a := []interface{}{1,2,3}
    b := []interface{}{"a","b","c"}

    c := cartesian.Iter(a, b)

    // receive products through channel
    for product := range c {
        fmt.Println(product)
    }

    // Unordered Output:
    // [1 c]
    // [2 c]
    // [3 c]
    // [1 a]
    // [1 b]
    // [2 a]
    // [2 b]
    // [3 a]
    // [3 b]
}

Working with Types

Because you are giving interfaces to Iter() and golang doesn't support mixed-type-maps (which is why i created this package) you have to assert types, when you do function-calls or something like that:


func someFunc(a int, b string) {
    // some code
}

// ...

for product := range c {
    someFunc(product[0].(int), product[1].(string))
}

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Iter

func Iter(params ...[]interface{}) chan []interface{}

Iter takes interface-slices and returns a channel, receiving cartesian products

Example
a := []interface{}{1, 2, 3}
b := []interface{}{"a", "b", "c"}

c := cartesian.Iter(a, b)

// receive products through channel
for product := range c {
	fmt.Println(product)
}
Output:

[1 c]
[2 c]
[3 c]
[1 a]
[1 b]
[2 a]
[2 b]
[3 a]
[3 b]

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL