2017-04-17 2 views
1

Gibt es eine bessere Möglichkeit, eine Funktion auf Felder eines Objekts anzuwenden und dann das Ergebnis in eine neue Scheibe zu kopieren? Besser, ich meine eine bessere Leistung als eine For-Schleife.Golang kopieren Elemente des Objekts zu schneiden

var tmp []string 
for _, value := range some_object.some_field { 
    tmp = append(tmp, do_something(value)) 
} 

Etwas wie:

tmp := map_copy(do_something(some_object.some_field)) 

Mit der resultierenden Scheibe Wesen:

tmp[0] = do_something(some_object.some_value[0]) 
tmp[1] = do_something(some_object.some_value[1]) 
tmp[2] = do_something(some_object.some_value[2]) 
.... 
+0

'map_copy' wäre nur eine Funktion mit Ihrem für Schleife. Ich bin mir nicht sicher, was du fragst. – JimB

+0

Ich könnte es einfach selbst schreiben. Es war mehr auf den Leistungsaspekt ausgerichtet. Vielleicht gibt es etwas schickes internes, ich weiß nicht, welches das besser behandelt als eine for-Schleife. Entschuldigung wenn unklar. – maax

+0

Nicht ganz mit dieser speziellen Frage verwandt, aber es gibt eine Reihe von Slice-Tricks im Wiki, die einige einfache Optimierungen offenbaren, wie z. B. Anfügen mit Auslassungspunkten. Lesen Sie hier https://github.com/golang/go/wiki/SliceTricks – RayfenWindspear

Antwort

5

Die einzige Leistung erhöhen Sie hinzufügen könnte, ist die richtige Scheibe Kapazität vor der Zeit zugeordnet werden.

können Sie immer noch Werte hinzufügen, mit anhängen, indem sie mit einer Länge von 0 Stück beginnen:

tmp := make([]string, 0, len(some_object.some_field)) 
for _, value := range some_object.some_field { 
    tmp = append(tmp, do_something(value)) 
} 

oder durch die Scheiben direkt indizieren:

tmp := make([]string, len(some_object.some_field)) 
for i := range some_object.some_field { 
    tmp[i] = do_something(some_object.some_field[i]) 
} 
Verwandte Themen