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
|
||
}
|