http://play.golang.org/p/icQO_bAZNE
我正在练习使用堆的排序方式,但
1 2 3 | 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] |
我遇到那些错误,无法弄清楚如何正确输入assert
问题出在以下几行:
1 2 3 | heap.Push(bucket[x].([]IntArr), elem) arr[index] = heap.Pop(bucket[i].([]IntArr)) |
因为我想使用堆结构以便从每个存储桶中提取值
每个存储区为
1 2 | type IntArr []int type bucket [10]IntArr |
我在周末尝试了很多方法,无法弄清楚,对此我深表感谢。
要使用堆包,应为您的类型(在本例中为IntArr类型)实现heap.Interface。您可以在此处找到示例:http://golang.org/pkg/container/heap/#pkg-examples
然后您可以执行类似
的操作
1 | heap.Push(bucket[x], elem) |
- play.golang.org/p/F0J4qXdmzD我尝试了此操作,但仍无法正常工作...您如何更改我的代码才能正常工作?
- play.golang.org/p/i7O8HB6ez8-使用它作为起点。调试算法,排序不起作用
来自go spec:
For an expression x of interface type and a type T, the primary
expression
x.(T) asserts that x is not nil and that the value stored in x is of type T.
The notation x.(T) is called a type assertion.
- 是的,您是对的,但是我无法弄清楚如何使bucket [x]成为具有类型断言的接口类型,但我做不到。您能否简要说明一下如何更改我的代码?
-
@MaynardEPSILON我认为您应该考虑@kluyg关于实现
heap.Interface 的说法,而不是任何类型的断言。