需求:用go语言获取列表a存在列表b里面的数据
用go语言获取列表a不存在列表b里面的数据
错误想法:两个列表都进行for循环,然后进行if判断,得到的数据不准确
正确示例:一个列表里面的数据映射到字典里面,另一个列表循环,用ok判断map里面是否有相应的值,存在就放到新列表里面,不存在就删除,剩下的放在新列表里面
package main
import "log"
func main(){
var a,b []string
a = append(a,"1","2","3","4")
b = append(b,"1","2","3","5")
c :=Exist(a,b)
log.Println(c)
d :=Not_Exist(a,b)
log.Println(d)
}
//存在
func Exist(a []string, b []string ) ([]string) {
map1 :=make(map[string]struct{})
var list1 []string
for _,i :=range a{
map1[i] = struct{}{}
}
for _,i := range b{
_,ok :=map1[i]
if ok {
list1 = append(list1 , i)
}
}
return list1
}
//不存在
func Not_Exist(a []string, b []string) ([]string) {
map2 :=make(map[string]struct{})
var list2 []string
for _,i :=range a{
map2[i] = struct{}{}
}
for _,i :=range b{
_,ok :=map2[i]
if ok{
delete(map2,i)
}
}
for k := range map2{
list2 = append(list2,k)
}
return list2
}
结果
[1 2 3]
[4]