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 }