英文:
Find all matches in Go array
问题
我有一个结构体数组(结构体在底部详细说明)。
我想要找到所有符合特定 leg 和 site 值的结构体。
所以如果 leg=101,site=1024A,返回所有符合这些条件的结构体。
在 Go 中,应该如何实现这个功能?
type JanusDepth struct {
dataset string
ob string
leg string
site string
hole string
age float64
depth float64
long float64
lat float64
}
func findMatchingStructs(arr []JanusDepth, leg string, site string) []JanusDepth {
var matchingStructs []JanusDepth
for _, s := range arr {
if s.leg == leg && s.site == site {
matchingStructs = append(matchingStructs, s)
}
}
return matchingStructs
}
你可以使用 findMatchingStructs
函数来找到符合 leg 和 site 值的结构体。它会遍历给定的结构体数组,并将符合条件的结构体添加到一个新的数组中返回。
英文:
I have an array of structs (struct detailed at bottom)
I want to find all the structs that match certain values for, example, leg and site.
So if leg=101 and site=1024A give back all the structs that match these criteria.
What is the Go manner for doing this?
type JanusDepth struct {
dataset string
ob string
leg string
site string
hole string
age float64
depth float64
long float64
lat float64
}
答案1
得分: 10
简单明了:
leg := "101"
site := "1024A"
filtered := []JanusDepth{}
for _, e := range MyArrayOfStructs {
if(e.leg == leg && e.site == site) {
filtered = append(filtered, e)
}
}
// filtered 包含了符合条件的元素
英文:
Dead simple:
leg := "101"
site := "1024A"
filtered := []JanusDepth{}
for _, e := range MyArrayOfStructs {
if(e.leg == leg && e.site == site) {
filtered = append(filtered, e)
}
}
// filtered contains your elements
答案2
得分: 2
如果你的数据按照一个键进行排序,那么你可以使用http://golang.org/pkg/sort/#Search进行二分查找,如果数据量适中到大,这样做对性能更好。
英文:
If your data is ordered on one key, then you can use http://golang.org/pkg/sort/#Search to do a binary search, which is better for performance if the amount of data is moderate to large.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论