You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:50:39