在下面的示例代码中,我想根据用户名从 manyFullUsers
中删除 manySimpleUsers
中的一些用户。
如果我用一对嵌套的 for...range
循环来完成,将需要很多循环来过滤所有元素,尤其是当两个 slice 中都有大量元素时.
在 Go 中实现此目标的最佳方法是什么?
package main
import "fmt"
func main() {
fmt.Println("Hello, playground")
type FullUser struct {
UserName string
UserEmail string
}
manyFullUsers := []FullUser{{"foo", "foo@jawohl.com"},
{"bar", "bar@jawohl.com"},
{"baz", "baz@jawohl.com"}}
type SimpleUser struct {
UserName string
}
manySimpleUsers := []SimpleUser{{"foo"}, {"bar"}}
fmt.Println(manyFullUsers)
fmt.Println(manySimpleUsers)
}
最佳答案
创建 map 然后使用它进行过滤。
func filterByUserName(fu []FullUser, su []SimpleUser) (out []FullUser) {
f := make(map[string]struct{}, len(su))
for _, u := range su {
f[u.UserName] = struct{}{}
}
for _, u := range fu {
if _, ok := f[u.UserName]; ok {
out = append(out, u)
}
}
return
}
关于go - 根据 Golang 中的不同 slice 过滤结构 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32867780/