2016-05-28 34 views
0

我想實現一個簡單的合併排序使用輔助數組。我有type byString []string,它實現了Less, Swap, and Len方法。它基本上是遵循Go的sort包界面。Go - 如何複製界面切片?

但是,我選擇最佳路線將byString切片複製到臨時陣列時遇到一些困難。

請幫助我擺脫Java的多態性世界,使它與Go一起工作。

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'是專爲'sort.Sort'。它不適合像合併排序那樣的非就地排序。 –

+0

當'sort'包提供完美的排序和二進制搜索功能時,您可能首先想要解決爲什麼要實現合併排序的問題。 –

+0

他可能正在實現它的打印版本。 – OneOfOne

回答

0

使用內置copy功能,你只需要聲明新的分區作爲接口類型:

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) 
}