为了账号安全,请及时绑定邮箱和手机立即绑定

根据 Go 中的条件从切片中选择值的最惯用的方法是什么?

根据 Go 中的条件从切片中选择值的最惯用的方法是什么?

Go
拉莫斯之舞 2021-09-09 13:58:28
我一直在做很多循环来过滤值,有时甚至将切片转换为具有方便索引的地图来实现这一点,但我觉得这可能不是在 Go 中做到这一点的最佳方式。所以:考虑以下样板代码,在people切片上找到第一个名为“Bob”的人的最惯用方法是什么?found应该是一个布尔变量,以确定是否找到了名为“Bob”的人。package mainimport "fmt"type Person struct {    Age int    Name string}var people=[]Person{{Age:18,Name:"Deb"},{Age:22,Name:"Bob"},{Age:35,Name:"Bob"}}func main() {    FirstBob, found := // how to pick first "Bob"?    fmt.Println(FirstBob)}更通用:从符合特定条件的切片中选择第一个值的最惯用的方法是什么?
查看完整描述

2 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

例如,


package main


import "fmt"


type Person struct {

    Age  int

    Name string

}


var people = []Person{{Age: 18, Name: "Deb"}, {Age: 22, Name: "Bob"}, {Age: 35, Name: "Bob"}}


func findPerson(people []Person, name string) (Person, bool) {

    for _, p := range people {

        if p.Name == name {

            return p, true

        }

    }

    return Person{}, false

}


func main() {

    FirstBob, found := findPerson(people, "Bob")

    if found {

        fmt.Println(FirstBob)

    }

}

输出:


{22 Bob}

如果你想返回一个指向Person结构的指针,


package main


import "fmt"


type Person struct {

    Age  int

    Name string

}


var people = []Person{{Age: 18, Name: "Deb"}, {Age: 22, Name: "Bob"}, {Age: 35, Name: "Bob"}}


func findPerson(people []Person, name string) (*Person, bool) {

    for i := range people {

        p := &people[i]

        if p.Name == name {

            return p, true

        }

    }

    return nil, false

}


func main() {

    FirstBob, found := findPerson(people, "Bob")

    if found {

        fmt.Println(*FirstBob)

    }

}

输出:


{22 Bob}


查看完整回答
反对 回复 2021-09-09
  • 2 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信