Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Golang中的不同切片筛选结构切片_Go - Fatal编程技术网

基于Golang中的不同切片筛选结构切片

基于Golang中的不同切片筛选结构切片,go,Go,在下面的示例代码中,我想根据用户名从manyFullUsers中删除manyFullUsers中的一些用户 如果我用一对嵌套的为。。。范围循环,过滤所有元素将需要许多周期,特别是当两个切片中都有大量元素时 在围棋中实现这一目标的最佳方式是什么 package main import "fmt" func main() { fmt.Println("Hello, playground") type FullUser struct { UserName str

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

如果我用一对嵌套的
为。。。范围
循环,过滤所有元素将需要许多周期,特别是当两个切片中都有大量元素时

在围棋中实现这一目标的最佳方式是什么

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

创建地图,然后使用它进行过滤

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
}

顺便说一下,您可以使用bools映射来保存一些字节:``f:=make(map[string]bool,len(su))//稍后,在内部循环中:f[u.UserName]=true````@coquin
struct{}
使用0个字节,其中bools至少使用1个字节。谢谢!我可以直接解组到
map[string]struct{}
中,因为“过滤”JSON的格式在我的控制之下。我还需要做与你写的相反的事情,所以我只使用了
!好的
,它成功了。再次感谢!