2013-10-11 5 views
5

ich ein Array von Strukturen haben (struct unten beschrieben)Alle Spiele in Los Array

ich alle structs finden wollen, die für, beispielsweise, Bein- und Stelle bestimmten Werten entsprechen.

Also, wenn Bein = 101 und Standort = 1024A geben Sie alle Strukturen zurück, die diese Kriterien erfüllen.

Was ist die Go-Art dafür?

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

Sie müssen Schleife und testen. Das ist alles. –

Antwort

9

Toten einfach:

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

Ist das der idiomatische Weg, es zu tun? Ich wusste nicht, ob es so etwas wie einen Fund oder einen Fundalload-Ansatz wie Groovy usw. gab. Ich denke, ich dachte nicht, dass die Iteration durch jedes Array-Element die Lösung wäre. –

+2

Ja, das ist idiomatisch. Während es möglich ist, eine Suchfunktion zu verwenden, die Reflektion verwendet, um das zu tun, wonach Sie suchen, ist die Iteration über die Scheibe trivial und viel effizienter. Das ist wahrscheinlich der Grund, warum sie keine Suchfunktion in den Standardbibliotheken implementiert haben. – ANisus

+0

ANisus Danke für die Info ... Ich denke, ich hätte erwarten sollen, dass mehr C wie Java ist. :) Ich dachte nur, eine vollständige Wiederholung wäre nicht der beste Ansatz. Ich werde Tomwildes Antwort akzeptieren. Angesichts der Größe meiner Daten denke ich, dass ich mir etwas überlegen muss, um die Dinge besser zu organisieren ... sonst werde ich viel Zeit in Schleifen verbringen. –

2

Wenn Sie Ihre Daten auf einem Schlüssel bestellt wird, dann können Sie http://golang.org/pkg/sort/#Search verwenden, um eine binäre Suche zu tun, die besser für die Leistung ist, wenn die Datenmenge moderat zu groß.