2014-03-24 17 views
17

Ich habe eine rekursive Funktion, die Objekte erstellt, die Dateipfade darstellen (die Schlüssel sind Pfade und die Werte sind Informationen über die Datei). Es ist rekursiv, da es nur für Dateien gedacht ist. Wenn ein Verzeichnis gefunden wird, wird die Funktion rekursiv für das Verzeichnis aufgerufen.Die Vereinigung von zwei Karten in gehen

Alles was gesagt wird, würde ich gerne das Äquivalent einer Satz Union auf zwei Karten tun (d. H. Die "Haupt" -Karte aktualisiert mit den Werten aus dem rekursiven Aufruf). Gibt es einen idiomatischen Weg, dies zu tun, abgesehen davon, dass man über eine Karte iteriert und jedem Schlüssel, Wert darin, dasselbe in der anderen Karte zuweist?

Das heißt: Da a,b vom Typ sind map [string] *SomeObject und a und b schließlich besiedelt sind, ist es eine Möglichkeit, a mit allen Werten in b zu aktualisieren?

+1

Vielleicht können Sie einen aktuellen Satz Behälter für diese Art von Arbeit nutzen: http://github.com/deckarep/golang-set –

+0

Ralph Vorschlag ist gut für Sätze. Ich würde jedoch sagen, dass es in Ihrem Fall nicht so sehr eine * Vereinigung *, sondern eine * Vereinigung * ist; Eine Menge sollte nur eine Sammlung von "Schlüsseln" sein, während Sie zwei Sammlungen von Schlüssel/Wert-Paaren haben, wobei eine "Menge" Vorrang vor der anderen haben sollte. – ANisus

Antwort

33

In den Standardpaketen gibt es keine integrierte Methode und keine Methode für eine solche Zusammenführung.

Der idomatic Weg ist, einfach durchlaufen:

for k, v := range b { 
    a[k] = v 
} 
+1

Um hinzuzufügen, was ANisus beantwortet: Karten sind im Wesentlichen Hash-Tabellen. Es gibt wahrscheinlich keine Möglichkeit, die Vereinigung von zwei Karten schneller zu berechnen, als einfach über beide Karten zu iterieren. – fuz

+0

Sie könnten wahrscheinlich Reflektion verwenden, um eine typ-agnostische Vereinigungsfunktion zu schreiben, aber es wäre langsamer. – Evan

+0

Sollte dieser Code UNION nicht den Wert von [k] und v vor dem Zuweisen von v zu a [k]? Was ist, wenn a [k] und v Arrays oder Maps sind? – vdolez

Verwandte Themen