如何在golang中从结构数组中检索元素数组?

yeotifhr  于 2023-05-20  发布在  Go
关注(0)|答案(4)|浏览(126)

我是新来的,被困在这里了。我有一个数组结构:

Users []struct {
   UserName string 
   Category string
   Age string
}

我想从这个结构数组中检索所有的用户名。因此,输出的类型为:

UserList []string

我知道使用循环手动检索元素并从中构造数组的蛮力方法。还有别的办法吗?

n9vozmp4

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

qni6mghb2#

不,go不像python或ruby那样提供很多辅助方法。所以你必须迭代结构数组并填充数组。

2uluyalo

2uluyalo3#

不,不是开箱即用。
但是,有一个Go包,它有很多帮助方法。https://github.com/ahmetb/go-linq
如果你导入它,你可以用途:

From(users).SelectT(func(u User) string { return u.UserName })

此包基于C# .NET LINQ,非常适合此类操作。

4smxwvx5

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

相关问题