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

Arrays 如何在golang中查找两个切片的截距结果,arrays,go,intercept,Arrays,Go,Intercept,字符串类型中有两个切片。我想从golang中的两个切片在集合中找到截取结果。我想找到最佳解决方案,而不是迭代每个切片 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-

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

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)
        }
    }
}
如果能给我一个好的解决方案,我将不胜感激

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)

输出是您想要的

空结构不占用货币空间

更重要的是,在戈朗总是使用骆驼


输出是您想要的

空结构不占用货币空间


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

这些是
切片
,而不是数组!将较短片段的字符串填充到映射中,作为O(1)查找存在性的键,并迭代较长片段,查找映射中附加到结果集(如果找到)的值。比你的方法需要更多的内存。与往常一样权衡。相关/可能重复:;及;及;这些是切片,而不是数组!将较短片段的字符串填充到映射中,作为O(1)查找存在性的键,并迭代较长片段,查找映射中附加到结果集(如果找到)的值。比你的方法需要更多的内存。与往常一样权衡。相关/可能重复:;及;及;大数据集的性能如何使用这个..这就是使用map的原因。@Sandumpriyanka时间复杂度为O(n),比您在O(n^2)上发布的时间复杂度好得多。唯一的问题是它需要更多的内存。使用empty struct可以为帮助保存一些MemoryTank。使用它的大型数据集的性能如何。这就是使用map的原因。@Sandupriyanka时间复杂度为O(n),比您在O(n^2)上发布的时间复杂度好得多。唯一的问题是它需要更多的内存。使用empty struct可以为帮助保存一些memorythank。