基于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的格式在我的控制之下。我还需要做与你写的相反的事情,所以我只使用了!好的
,它成功了。再次感谢!