214 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			214 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 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
 | ||
| }
 |