2 回答

TA貢獻1874條經(jīng)驗 獲得超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條經(jīng)驗 獲得超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 關(guān)注
- 161 瀏覽
添加回答
舉報