2013-12-23 2 views
2

http://play.golang.org/p/icQO_bAZNEGo Golang: Тип утверждение о заказном типе

Я практикую сортировки, используя кучу, но

prog.go:85: type bucket is not an expression 
    prog.go:105: cannot use heap.Pop(bucket[i].([]IntArr)) (type interface {}) as type int in assignment: need type assertion 
    [process exited with non-zero status] 

Я получаю эти ошибки и не могу понять, как напечатать утверждать правильно

Проблема связана со строками:

heap.Push(bucket[x].([]IntArr), elem) 

    arr[index] = heap.Pop(bucket[i].([]IntArr)) 

Поскольку я хочу использовать hea р структура с целью извлечения значений из каждого ковша

И каждого ведра []IntArr

И IntArr является []int как следующий

type IntArr []int 
type bucket [10]IntArr 

Я пытался много способов в выходные дни и не может выяснить, я очень признателен.

ответ

2

Чтобы использовать кучу кучи, вы должны реализовать heap.Interface для вашего типа (в данном случае для вашего типа IntArr). Вы можете найти пример здесь: http://golang.org/pkg/container/heap/#pkg-examples

Затем вы можете сделать что-то вроде

heap.Push(bucket[x], elem) 
+0

http://play.golang.org/p/F0J4qXdmzD Я пробую это, но все равно не работаю ... Как бы вы изменили мой код на работу? –

+1

http://play.golang.org/p/i7O8HB6ez8 - используйте это как отправную точку. Отладка вашего алгоритма, ваш вид не работает – Kluyg

+0

Я вижу. Большое спасибо! –

2

От go spec:

Для выражения х типа интерфейса и типа Т, первичный выражение

x.(T)

утверждает, что х не ноль и что значение, сохраненное в x имеет тип T. Обозначение x. (T) называется утверждением типа.

bucket[x] не является выражением типа интерфейса, больше here.

+0

Да, вы правы, но я не могу понять, как сделать ведро [х] тип интерфейса с типом утверждения и I я не могу этого сделать. Не могли бы вы вкратце объяснить, как вы измените мой код? –

+0

@MaynardEPSILON Я думаю, что вы должны рассмотреть, что [@kluyg] (http://stackoverflow.com/users/91570/kluyg) сказал о реализации 'heap.Interface' вместо утверждения любого типа. – tarrsalah

Смежные вопросы