2 回答
TA贡献1874条经验 获得超12个赞
比较两个切片是否缺少元素
我有两片:a []string, b []string. b包含所有相同的元素加上a一个额外的元素。
例如,
package main
import (
"fmt"
)
func missing(a, b []string) string {
ma := make(map[string]bool, len(a))
for _, ka := range a {
ma[ka] = true
}
for _, kb := range b {
if !ma[kb] {
return kb
}
}
return ""
}
func main() {
a := []string{"a", "b", "c", "d", "e", "f", "g"}
b := []string{"a", "1sdsdfsdfsdsdf", "c", "d", "e", "f", "g", "b"}
fmt.Println(missing(a, b))
}
输出:
1sdsdfsdfsdsdf
TA贡献1829条经验 获得超4个赞
/*
An example of how to find the difference between two slices.
This example uses empty struct (0 bytes) for map values.
*/
package main
import (
"fmt"
)
// empty struct (0 bytes)
type void struct{}
// missing compares two slices and returns slice of differences
func missing(a, b []string) []string {
// create map with length of the 'a' slice
ma := make(map[string]void, len(a))
diffs := []string{}
// Convert first slice to map with empty struct (0 bytes)
for _, ka := range a {
ma[ka] = void{}
}
// find missing values in a
for _, kb := range b {
if _, ok := ma[kb]; !ok {
diffs = append(diffs, kb)
}
}
return diffs
}
func main() {
a := []string{"a", "b", "c", "d", "e", "f", "g"}
b := []string{"a", "c", "d", "e", "f", "g", "b"}
c := []string{"a", "b", "x", "y", "z"}
fmt.Println("a and b diffs", missing(a, b))
fmt.Println("a and c diffs", missing(a, c))
}
输出
a and b diffs []
a and c diffs [x y z]
- 2 回答
- 0 关注
- 111 浏览
添加回答
举报