You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
1.9 KiB
Go

2 years ago
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
}