176 lines
3.2 KiB
Go
176 lines
3.2 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 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
|
|||
|
}
|
|||
|
|
|||
|
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
|
|||
|
}
|