在Go数组中查找所有匹配项

huangapple go评论91阅读模式
英文:

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.

huangapple
  • 本文由 发表于 2013年10月12日 00:17:44
  • 转载请务必保留本文链接:https://go.coder-hub.com/19322764.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定