2017-09-04 2 views
-3

ich eine Funktion haben, die eine 2D-Schicht erzeugt, eine Zeile und drei Spaltenmehrdimensionalen Scheibe neue Zeile anhängen

func threeSum(nums []int) [][]int { 
    result := make([][]int, 1) 
    result[0] = []int{1, 2, 3} 
    return result 
} 

Was passiert, wenn ich will, um dynamisch eine Zeile hinzufügen?

Wenn result war nur eine normale Scheibe würde ich nur an das Ende der Scheibe anhängen, aber mit der 2d-Array scheint es, ich muss manuell eine Menge Dinge tun, gibt es einen einfacheren Weg?

EDIT: Mein Weg, es zu tun wäre, wenn ich eine neue Zeile hinzufügen muß:

result = append(result, []int{4, 2, 3}) 

im Nachhinein, die zwar nicht schlecht ist :) Wenn jemand hat eine Meinung Ich werde glücklich sein akzeptieren.

+1

* Gibt es einen einfacheren Weg? * Als was? Sie haben Ihre Implementierung nicht angezeigt. –

Antwort

0

Die Art und Weise präsentieren in der Tat ist, wie es getan werden sollte, sicherlich ist es der einfachste Weg ...

Es gibt einen Weg, um es mit copy zu tun, aber das müssten Sie manuell eine neue Scheibe alocate , so war es oft viel langsamer, und in jedem Fall würde es mehr Code erfordern.

Wenn Sie eine neue Spalte in der Mitte oder am Anfang der vorhandenen hinzufügen müssen, dann müssen Sie eine neue Scheibe zuordnen (oder, wenn Ihre aktuelle Scheibe ungenutzten Platz hat, erhöht sich ihre Länge) Kopieren Sie die Elemente aus dem alten Slice in den neuen Slice (in zwei Schritten, damit der Slot, den Sie für Ihr neues Element benötigen, leer bleibt) und fügen Sie Ihr neues Element schließlich direkt hinzu. Dies erfordert mindestens 3 Zeilen Code in dem kompaktesten Fall, mehr mit Begrenzungsüberprüfung und optional höheren Effizienzpfaden.

Verwandte Themen