为了账号安全,请及时绑定邮箱和手机立即绑定

根据 Golang 中的不同切片过滤结构切片

根据 Golang 中的不同切片过滤结构切片

Go
肥皂起泡泡 2021-11-08 19:12:13
在下面的示例代码中manySimpleUsers,我想manyFullUsers根据用户名删除一些用户。如果我使用嵌套的几个for... range循环来执行此操作,则过滤所有元素将需要很多次循环,尤其是当两个 Slices 中都有大量元素时。在 Go 中实现这一目标的最佳方法是什么?package mainimport "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)}
查看完整描述

1 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

创建一个地图,然后用它来过滤。


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

}


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 244 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信