gpt4 book ai didi

go - 根据 Go 中的条件从 slice 中选取值的最惯用方法是什么?

转载 作者:IT王子 更新时间:2023-10-29 01:55:32 27 4
gpt4 key购买 nike

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

考虑以下样板代码,在 people slice 上找到名为“Bob”的第一个人的最惯用方法是什么? found 应该是一个 bool 变量,以确定是否找到了名为“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)
}

更一般化:从符合特定条件的 slice 中选取第一个值的最惯用方法是什么?

最佳答案

例如,

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}

关于go - 根据 Go 中的条件从 slice 中选取值的最惯用方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27209100/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com