【问题标题】:How to retrieve array of elements from array of structure in golang?如何从golang中的结构数组中检索元素数组?
【发布时间】:2016-03-14 07:46:53
【问题描述】:

我是 golang 的新手,并且被困在这个问题上。我有一个结构数组:

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

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

UserList []string 

我知道使用循环手动检索元素并从中构造数组的蛮力方法。有没有其他方法可以做到这一点?

【问题讨论】:

    标签: arrays data-structures go slice


    【解决方案1】:

    不,go 没有像 python 或 ruby​​ 那样提供很多辅助方法。所以你必须遍历结构数组并填充你的数组。

    【讨论】:

      【解决方案2】:

      不,循环是要走的路。

      这是一个工作示例。

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

      【讨论】:

      • @kostya,炫耀一下......因为问题来自 Go 新手,所以我想尽可能明确。 (混淆的可能性较小)
      • 它仍然是 Go 语法的一部分,经常使用,当你阅读 Go 代码时你必须知道它。它不太明确,但我认为值得一提,尤其是对于刚接触 Go 的人。
      【解决方案3】:

      不,不是开箱即用的。

      但是,有一个Go 包,其中有很多帮助方法。 https://github.com/ahmetb/go-linq

      如果你导入这个,你可以使用:

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

      这个包基于 C# .NET LINQ,非常适合这种操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-30
        • 1970-01-01
        • 1970-01-01
        • 2014-10-29
        相关资源
        最近更新 更多