98 lines
1.9 KiB
Go
98 lines
1.9 KiB
Go
package utils
|
|
|
|
import "strconv"
|
|
|
|
func BeUniqueSlice_string(src, dest []string) (add []string, del []string, same []string) {
|
|
srcMap := make(map[string]byte) //按源数组建索引
|
|
allMap := make(map[string]byte) //所有元素建索引
|
|
|
|
//1.建立map
|
|
for _, v := range src {
|
|
srcMap[v] = 0
|
|
allMap[v] = 0
|
|
}
|
|
|
|
//2.将 dest 元素添加到 mall(msrc) 中,长度发生变化,即元素添加成功, 记录添加不成功的元素,便是重复元素
|
|
for _, v := range dest {
|
|
l := len(allMap)
|
|
allMap[v] = 0
|
|
if l != len(allMap) {
|
|
l = len(allMap)
|
|
} else {
|
|
same = append(same, v)
|
|
}
|
|
}
|
|
|
|
//3.找相同
|
|
for _, v := range same {
|
|
delete(allMap, v)
|
|
}
|
|
|
|
//4.找不同
|
|
for v, _ := range allMap {
|
|
_, exist := srcMap[v]
|
|
if exist {
|
|
del = append(del, v)
|
|
} else {
|
|
add = append(add, v)
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func BeUniqueSlice_uint(src, dest []uint) (add []uint, del []uint, same []uint) {
|
|
srcMap := make(map[uint]byte) //按源数组建索引
|
|
allMap := make(map[uint]byte) //所有元素建索引
|
|
|
|
//1.建立map
|
|
for _, v := range src {
|
|
srcMap[v] = 0
|
|
allMap[v] = 0
|
|
}
|
|
|
|
//2.将 dest 元素添加到 mall(srcMap) 中,长度发生变化,即元素添加成功, 记录添加不成功的元素,便是重复元素
|
|
for _, v := range dest {
|
|
l := len(allMap)
|
|
allMap[v] = 0
|
|
if l != len(allMap) {
|
|
l = len(allMap)
|
|
} else {
|
|
same = append(same, v)
|
|
}
|
|
}
|
|
|
|
//3.找相同
|
|
for _, v := range same {
|
|
delete(allMap, v)
|
|
}
|
|
|
|
//4.找不同
|
|
for v, _ := range allMap {
|
|
_, exist := srcMap[v]
|
|
if exist {
|
|
del = append(del, v)
|
|
} else {
|
|
add = append(add, v)
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func ConvertString2Uint(src []string) (dest []uint) {
|
|
for i := 0; i < len(src); i++ {
|
|
x, _ := strconv.ParseUint(src[i], 10, 64)
|
|
dest = append(dest, uint(x))
|
|
}
|
|
return
|
|
}
|
|
|
|
func ConvertUint2String(src []uint) (dest []string) {
|
|
for i := 0; i < len(src); i++ {
|
|
x := strconv.FormatUint(uint64(src[i]), 10)
|
|
dest = append(dest, x)
|
|
}
|
|
return
|
|
}
|