Go语言如何对比字符串切片并提取差集存入新切片
Go语言中找出仅存在于一个切片的元素
针对你的需求,有两种常见实现方式,可根据切片大小选择:
方法一:双层循环遍历(适合小切片场景)
直接遍历cachedenp_slice的每个元素,逐个检查是否存在于enp_slice中,不存在则加入结果切片:
package main import "fmt" func main() { enp_slice := []string{"10.10.10.10", "10.10.10.11"} cachedenp_slice := []string{"10.10.10.10", "10.10.10.11", "10.10.10.12"} result := []string{} // 遍历cachedenp_slice的每个元素 for _, item := range cachedenp_slice { found := false // 检查当前元素是否在enp_slice中 for _, target := range enp_slice { if item == target { found = true break } } // 如果没找到,就加入结果切片 if !found { result = append(result, item) } } fmt.Println(result) // 输出: [10.10.10.12] }
方法二:利用Map优化查找效率(适合大切片场景)
把enp_slice的元素存入map作为key,利用map的O(1)查找特性提升性能,避免双层循环的O(n*m)时间复杂度:
package main import "fmt" func main() { enp_slice := []string{"10.10.10.10", "10.10.10.11"} cachedenp_slice := []string{"10.10.10.10", "10.10.10.11", "10.10.10.12"} result := []string{} // 把enp_slice的元素存入map,用空结构体节省内存 enpMap := make(map[string]struct{}) for _, item := range enp_slice { enpMap[item] = struct{}{} } // 遍历cachedenp_slice,检查元素是否不在map中 for _, item := range cachedenp_slice { if _, exists := enpMap[item]; !exists { result = append(result, item) } } fmt.Println(result) // 输出: [10.10.10.12] }
两种方法都能得到预期结果,大切片场景下优先选方法二,性能优势更明显。
内容的提问来源于stack exchange,提问作者Neha Kembalkar
相关产品推荐
相关产品推荐

