我是新来的,被困在这里了。我有一个数组结构:
Users []struct { UserName string Category string Age string }
我想从这个结构数组中检索所有的用户名。因此,输出的类型为:
UserList []string
我知道使用循环手动检索元素并从中构造数组的蛮力方法。还有别的办法吗?
n9vozmp41#
不,循环是要走的路。这里有一个工作的例子。
package main import "fmt" type User struct { UserName string Category string Age int } type Users []User func (u Users) NameList() []string { var list []string for _, user := range u { list = append(list, user.UserName) } return list } func main() { users := Users{ User{UserName: "Bryan", Category: "Human", Age: 33}, User{UserName: "Jane", Category: "Rocker", Age: 25}, User{UserName: "Nancy", Category: "Mother", Age: 40}, User{UserName: "Chris", Category: "Dude", Age: 19}, User{UserName: "Martha", Category: "Cook", Age: 52}, } UserList := users.NameList() fmt.Println(UserList) }
qni6mghb2#
不,go不像python或ruby那样提供很多辅助方法。所以你必须迭代结构数组并填充数组。
2uluyalo3#
不,不是开箱即用。但是,有一个Go包,它有很多帮助方法。https://github.com/ahmetb/go-linq如果你导入它,你可以用途:
Go
From(users).SelectT(func(u User) string { return u.UserName })
此包基于C# .NET LINQ,非常适合此类操作。
LINQ
4smxwvx54#
你可以的使用https://github.com/szmcdull/glinq,您可以执行以下操作:
package main import ( "fmt" "github.com/szmcdull/glinq/garray" ) func main() { var users []struct { UserName string Category string Age string } var userNames []string userNames = garray.MapI(users, func(i int) string { return users[i].UserName }) fmt.Printf("%v\r\n", userNames) }
4条答案
按热度按时间n9vozmp41#
不,循环是要走的路。
这里有一个工作的例子。
qni6mghb2#
不,go不像python或ruby那样提供很多辅助方法。所以你必须迭代结构数组并填充数组。
2uluyalo3#
不,不是开箱即用。
但是,有一个
Go
包,它有很多帮助方法。https://github.com/ahmetb/go-linq如果你导入它,你可以用途:
此包基于C# .NET
LINQ
,非常适合此类操作。4smxwvx54#
你可以的使用https://github.com/szmcdull/glinq,您可以执行以下操作: