如何在golang中找到两个切片的截距结果

时间:2016-11-23 14:14:55

标签: arrays go intercept

字符串类型中有两个切片。我想从golang中的两个切片中找到set的拦截结果。我想找到最佳解决方案,而不是迭代每个切片。

first_slice := []string{"F8-E7-1E-14-AE-00", "F8-E7-1E-14-D0-30", "84-18-3A-2F-05-E0","84-18-3A-2F-05-E8" } 
second_slice := []string{"F8-E7-1E-14-D0-30", "84-18-3A-2F-05-E8","F8-E7-1E-54-AE-08"}


Output:
    result_slice := []string{"F8-E7-1E-14-D0-30", "84-18-3A-2F-05-E8"}

我使用了以下方法,但它不是大数据集的最佳方法。

var result_slice *[]string

for _, i := range first_slice {
    for _, x := range second_slice {
        if i == x {
            &result_slice.append(i)
        }
    }
}

感谢给我一个好的解决方案。

1 个答案:

答案 0 :(得分:2)

firstSlice := []string{"F8-E7-1E-14-AE-00", "F8-E7-1E-14-D0-30",
    "84-18-3A-2F-05-E0", "84-18-3A-2F-05-E8"}
secondSlice := []string{"F8-E7-1E-14-D0-30", "84-18-3A-2F-05-E8",
    "F8-E7-1E-54-AE-08"}

resultSlice := []string{}
checkMap := map[string]struct{}{}

for _, addr := range firstSlice {
    checkMap[addr] = struct{}{}
}
for _, addr := range secondSlice {
    if _, ok := checkMap[addr]; ok {
        resultSlice = append(resultSlice, addr)
    }
}

fmt.Println(resultSlice)

输出就是你想要的。

空结构在monery中不占用空间

更重要的是,总是在golang中使用camel。