func ArrayIntersect[T comparable](a []T, b []T) []T {
set := make([]T, 0)
hash := make(map[T]int)
for _, v := range a {
hash[v]++
}
for _, v := range b {
if _, ok := hash[v]; ok {
set = append(set, v)
}
}
return set
}