2016-05-28 19 views
0

Ich versuche, eine einfache Zusammenführungssortierung mit einem Hilfsarray zu implementieren. Ich habe type byString []string, die die Methoden Less, Swap, and Len implementiert. Es folgt im Grunde Go's sort Paket-Schnittstelle.Go - Wie kopiere ich eine Schnittstelle?

Allerdings habe ich Schwierigkeiten bei der Auswahl der besten Route zum Kopieren der byString Scheibe in ein temporäres Array.

Bitte helfen Sie mir aus der Polymorphismus-Welt von Java auszubrechen, damit es mit Go funktioniert.

func merge(data Interface, lo, mid, hi int) { 
    i, j := lo, mid+1 

    // How do I copy data's elements to a new slice called aux? 
} 
+4

'sort.Interface' für' sort.Sort' ausgelegt ist. Es ist nicht gut für eine nicht-in-Place-Sortierung wie Merge-Sort. –

+0

Vielleicht möchten Sie die Frage beantworten, warum Sie die Zusammenführungs-Sortierung überhaupt durchführen, wenn das 'sort'-Paket eine perfekte Sortier- und Binärsuchfunktion bietet. –

+0

Er könnte eine getippte Version davon implementieren. – OneOfOne

Antwort

0

Verwenden Sie die integrierte in copy Funktion, die Sie gerade die neue Scheibe als Schnittstelle Typ deklarieren müssen:

type Interface []string 

func merge(data Interface, lo, mid, hi int) { 
    i, j := lo, mid+1 
    var aux Interface = make([]string, len(data), len(data)) 
    copy(aux, data) 
}