Types Go Golang:自定义类型上的类型断言
我正在练习使用堆进行排序,但是Types Go Golang:自定义类型上的类型断言,types,interface,go,type-conversion,Types,Interface,Go,Type Conversion,我正在练习使用堆进行排序,但是 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
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
问题来自以下几行:
heap.Push(bucket[x].([]IntArr), elem)
arr[index] = heap.Pop(bucket[i].([]IntArr))
因为我想使用堆结构从每个bucket中提取值
并且每个桶都是[]intar
而intar
是[]int
如下所示
type IntArr []int
type bucket [10]IntArr
我在周末尝试了很多方法,但都不明白,我非常感谢。来自:
对于接口类型为x的表达式和类型为T的表达式,主
表情
x.(T)
断言x不是nil,并且存储在x中的值是T类型。
符号x.(T)称为类型断言
bucket[x]
不是接口类型的表达式,请参阅更多。来自:
对于接口类型为x的表达式和类型为T的表达式,主
表情
x.(T)
断言x不是nil,并且存储在x中的值是T类型。
符号x.(T)称为类型断言
bucket[x]
不是接口类型的表达式,请参阅更多。要使用heap包,您应该为您的类型实现heap.interface(在本例中,为您的IntArr类型)。您可以在此处找到示例:
然后你可以做像这样的事情
heap.Push(bucket[x], elem)
要使用heap包,您应该为您的类型实现heap.Interface(在本例中,为您的IntArr类型)。您可以在此处找到示例: 然后你可以做像这样的事情
heap.Push(bucket[x], elem)
我试过了,但还是不起作用。。。你将如何更改我的代码以使其工作以此为起点。调试您的算法,您的排序不起作用我尝试了这个,但仍然不起作用。。。你将如何更改我的代码以使其工作以此为起点。调试您的算法,您的排序不起作用是的,您是对的,但我不知道如何使bucket[x]成为具有类型断言的接口类型,我没有做到这一点。你能简要地解释一下你将如何改变我的代码吗?@ MaynardEPSILON,我认为你应该考虑关于实现<代码>堆>接口>代码>而不是任何类型的断言。是的,你是对的,但是我不知道如何使桶[X]是一个带有类型断言的接口类型,而我不能做到这一点。你能简要地解释一下你将如何改变我的代码吗?@ MaynardEPSILON,我认为你应该考虑关于执行<代码>堆。接口< /> >而不是任何类型的断言。