func IntersectStringSlice()

in pkg/utils/functional/functional.go [51:76]


func IntersectStringSlice(slices ...[]string) []string {
	if len(slices) == 0 {
		return nil
	}
	if len(slices) == 1 {
		return UniqueStrings(slices[0])
	}
	if slices[0] == nil {
		return IntersectStringSlice(slices[1:]...)
	}
	if slices[1] == nil {
		sliced := append(slices[:1], slices[2:]...)
		return IntersectStringSlice(sliced...)
	}
	counts := map[string]bool{}
	for _, s := range slices[0] {
		counts[s] = true
	}
	intersection := []string{}
	for _, s := range slices[1] {
		if _, ok := counts[s]; ok {
			intersection = append(intersection, s)
		}
	}
	return IntersectStringSlice(append(slices[2:], intersection)...)
}