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

我一直在做很多循环来过滤值,有时甚至将切片转换为具有方便索引的地图来实现这一点,但我觉得这可能不是在 Go 中做到这一点的最佳方式。所以:


考虑以下样板代码,在people切片上找到第一个名为“Bob”的人的最惯用方法是什么?found应该是一个布尔变量,以确定是否找到了名为“Bob”的人。


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 main() {

    FirstBob, found := // how to pick first "Bob"?

    fmt.Println(FirstBob)

}

更通用:从符合特定条件的切片中选择第一个值的最惯用的方法是什么?


拉莫斯之舞
浏览 177回答 2
2回答

慕姐8265434

例如,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 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 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 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}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go