package collection // Find Find获取一个切片并在其中查找元素。如果找到它,它将返回它的密钥,否则它将返回-1和一个错误的bool。 func Find(slice []string, val string) (int, bool) { for i, item := range slice { if item == val { return i, true } } return -1, false } // IntersectArray 求两个切片的交集 func IntersectArray(a []string, b []string) []string { var inter []string mp := make(map[string]bool) for _, s := range a { if _, ok := mp[s]; !ok { mp[s] = true } } for _, s := range b { if _, ok := mp[s]; ok { inter = append(inter, s) } } return inter } // IntersectArrayInt 求两个切片的交集 func IntersectArrayInt(a []int, b []int) []int { var inter []int mp := make(map[int]bool) for _, s := range a { if _, ok := mp[s]; !ok { mp[s] = true } } for _, s := range b { if _, ok := mp[s]; ok { inter = append(inter, s) } } return inter } func IntersectArrayString(a []string, b []string) []string { var inter []string mp := make(map[string]bool) for _, s := range a { if _, ok := mp[s]; !ok { mp[s] = true } } for _, s := range b { if _, ok := mp[s]; ok { inter = append(inter, s) } } return inter } func IntersectArrayUint64(a []uint64, b []uint64) []uint64 { var inter []uint64 mp := make(map[uint64]bool) for _, s := range a { if _, ok := mp[s]; !ok { mp[s] = true } } for _, s := range b { if _, ok := mp[s]; ok { inter = append(inter, s) } } return inter } func IntersectArrayUint(a []uint, b []uint) []uint { var inter []uint mp := make(map[uint]bool) for _, s := range a { if _, ok := mp[s]; !ok { mp[s] = true } } for _, s := range b { if _, ok := mp[s]; ok { inter = append(inter, s) } } return inter } // DiffArray 求两个切片的差集 a=[1,2,3,4] b=[3,4,5,6] =>1,2 func DiffArray(a []int, b []int) []int { var diffArray []int temp := map[int]struct{}{} for _, val := range b { if _, ok := temp[val]; !ok { temp[val] = struct{}{} } } for _, val := range a { if _, ok := temp[val]; !ok { diffArray = append(diffArray, val) } } return diffArray } // DiffArrayUint 求两个切片的差集 a=[1,2,3,4] b=[3,4,5,6] =>1,2 func DiffArrayUint(a []uint, b []uint) []uint { var diffArray []uint temp := map[uint]struct{}{} for _, val := range b { if _, ok := temp[val]; !ok { temp[val] = struct{}{} } } for _, val := range a { if _, ok := temp[val]; !ok { diffArray = append(diffArray, val) } } return diffArray } //a中删除在b中的 func DiffArrayString(a []string, b []string) []string { var diffArray []string temp := map[string]struct{}{} for _, val := range b { if _, ok := temp[val]; !ok { temp[val] = struct{}{} } } for _, val := range a { if _, ok := temp[val]; !ok { diffArray = append(diffArray, val) } } return diffArray } func DiffArrayUint64(a []uint64, b []uint64) []uint64 { var diffArray []uint64 temp := map[uint64]struct{}{} for _, val := range b { if _, ok := temp[val]; !ok { temp[val] = struct{}{} } } for _, val := range a { if _, ok := temp[val]; !ok { diffArray = append(diffArray, val) } } return diffArray } // RemoveRepeatedElement 切片去重实现 func RemoveRepeatedElement(arr []string) (newArr []string) { newArr = make([]string, 0) for i := 0; i < len(arr); i++ { repeat := false for j := i + 1; j < len(arr); j++ { if arr[i] == arr[j] { repeat = true break } } if !repeat { newArr = append(newArr, arr[i]) } } return } //切片去重实现 func arrayUnique(arr []string) []string { result := make([]string, 0, len(arr)) temp := map[string]struct{}{} for i := 0; i < len(arr); i++ { if _, ok := temp[arr[i]]; ok != true { temp[arr[i]] = struct{}{} result = append(result, arr[i]) } } return result }