猿问

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

在下面的示例代码中manySimpleUsers,我想manyFullUsers根据用户名删除一些用户。


如果我使用嵌套的几个for... range循环来执行此操作,则过滤所有元素将需要很多次循环,尤其是当两个 Slices 中都有大量元素时。


在 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)

}


肥皂起泡泡
浏览 245回答 1
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}
随时随地看视频慕课网APP

相关分类

Go
我要回答