2016-05-28 2 views
0

Я пытаюсь реализовать простой сортировку слияния, используя вспомогательный массив. У меня есть type byString []string, который реализует методы Less, Swap, and Len. Это в основном следующий интерфейс Go's 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) 
} 
Смежные вопросы