![](/static/assets/images/common/logo/logo_t-acg.png)
Go实现两个切片相减,比如 a是[“a”,“b”,“c”,“d”] b是[“c”,“d”] a-b 等于 [“a”,“b”] 如果a的长度大于b,则a-b,否则b-a
func sliceDifference(a, b []string) []string {
if len(a) > len(b) {
return subtract(a, b)
} else {
return subtract(b, a)
}
}
// 从切片 a 中减去切片 b 的元素
func subtract(a, b []string) []string {
// 创建一个空切片用于存储结果
var diff []string
// 创建一个 map,用于快速查找切片 b 的元素
bMap := make(map[string]bool)
for _, value := range b {
bMap[value] = true
}
// 遍历切片 a 的元素,如果元素不在切片 b 中,则将其添加到结果切片中
for _, value := range a {
if !bMap[value] {
diff = append(diff, value)
}
}
return diff
}
首先调用 sliceDifference(a, b) 函数来确定应该使用哪个操作。如果切片 a 的长度大于切片 b,则调用 subtract(a, b) 函数执行 a - b 的操作;否则,调用 subtract(b, a) 函数执行 b - a 的操作。
a := []string{"a", "b", "c", "d"}
b := []string{"c", "d"}
diff := sliceDifference(a, b)
fmt.Println(diff) // 输出: [a b]