github.com/pavlo67/common@v0.5.3/common/mathlib/sets/slices.go (about)

     1  package sets
     2  
     3  func Multiple[T interface{}](data [][]T) (dataMultipled [][]T) {
     4  
     5  	for _, optionsSet := range data {
     6  		var optionsMultipledNew [][]T
     7  
     8  		for _, optionValue := range optionsSet {
     9  			if len(dataMultipled) < 1 {
    10  				optionsMultipledNew = append(optionsMultipledNew, []T{optionValue})
    11  			} else {
    12  				for _, opts := range dataMultipled {
    13  					optionsMultipledNew = append(optionsMultipledNew, append(opts, optionValue))
    14  				}
    15  			}
    16  		}
    17  
    18  		dataMultipled = optionsMultipledNew
    19  	}
    20  
    21  	return dataMultipled
    22  }
    23  
    24  //func CyclicSignature(data []string) string {
    25  //	if len(data) < 1 {
    26  //		return ""
    27  //	}
    28  //
    29  //	var sign string
    30  //	for i := range data {
    31  //		var signOption string
    32  //		for j := range data {
    33  //			signOption += "_" + data[(i+j)%len(data)]
    34  //		}
    35  //		if i == 0 || signOption < sign {
    36  //			sign = signOption
    37  //		}
    38  //	}
    39  //
    40  //	return sign[1:]
    41  //}
    42  
    43  func Intersects[T comparable](set0, set1 []T) bool {
    44  
    45  	for _, v0 := range set0 {
    46  		for _, v1 := range set1 {
    47  			if v0 == v1 {
    48  				return true
    49  			}
    50  		}
    51  	}
    52  
    53  	return false
    54  }