最近在做项目中想比较两个map的差异,发现golang没有像php那样比较两个数组的函数array_diff,于是自己写一个,废话不多说,上代码:
// 返回arr1中有且arrs中没有的元素
func SilenceStringDiff(arr1 []string, arrs ...[]string) (data []string) {
if len(arrs) == 0 {
return arr1
}
i := 0
loop:
for {
if i == len(arr1) {
break
}
v := arr1[i]
for _, arr := range arrs {
for _, val := range arr {
if v == val {
i++
// 如果存在相同的元素,结束掉当前最外循环并继续
continue loop
}
}
}
// 将arr1中存在且arrs中不存在的元素添加到data中
data = append(data, v)
i++
}
return
}
测试结果如下:
func main() {
arr1 := []string{"1", "2", "3"}
arr2 := []string{"3", "aa", "b", "33"}
arr3 := []string{"2", "cc"}
data1 := SilenceStringDiff(arr1, arr2)
data2 := SilenceStringDiff(arr1, arr2, arr3)
fmt.Println(data1) // [1 2]
fmt.Println(data2) // [1]
}