2013-10-11 67 views
5

我有結構的數組(詳細結構在底部)查找轉到陣列

我想找到所有的,例如,腿部與本站符合特定值的結構所有比賽。

因此,如果leg = 101和site = 1024A回退符合這些標準的所有結構。

這樣做的方式是什麼?

type JanusDepth struct { 
    dataset string 
    ob  string 
    leg  string 
    site string 
    hole string 
    age  float64 
    depth float64 
    long float64 
    lat  float64 
} 
+2

你必須循環和測試。就這樣。 –

回答

9

死的簡單:

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 
+0

難道是這樣做的慣用方法嗎?我不知道是否有像find或findall類型的方法ala Groovy等。我想我並不認爲遍歷每個數組元素都是解決方案。 –

+2

是的,這是慣用的。雖然有可能做一個Find函數來利用反射來完成你以後的工作,但是對該切片的迭代是微不足道的,而且效率更高。這可能是他們沒有在標準庫中實現任何Find函數的原因。 – ANisus

+0

ANisus感謝您的信息......我想我應該期待Go更像C那樣的Java。 :)我只是認爲迭代完整不會是最好的方法。我會標記tomwilde的答案。考慮到我的數據的大小,我認爲我需要想出一些方法來事先對事情進行更好的整理......否則我將花費大量時間在循環中。 –

2

如果你的數據在一個鍵排序,那麼你可以使用http://golang.org/pkg/sort/#Search做一個二進制搜索,這是性能更好,如果數據量是中度至大。