如何将函数扩展到 Golang 中的导入类型

我有一个进口类型


type ExternalType struct {

   quantity int

}



type ExternalArray []*ExternalType

我希望能够为 ExternalArray 实现排序接口,以便按数量对其进行排序。


但是,我不确定我该怎么做?


一个具体的例子是这样的:


https://play.golang.org/p/bEPtJ8NHQK


有只小跳蛙
浏览 172回答 2
2回答

偶然的你

在sort.Interface定义了三个方法必须实现:// Len is the number of elements in the collection.Len() int// Less reports whether the element with// index i should sort before the element with index j.Less(i, j int) bool// Swap swaps the elements with indexes i and j.Swap(i, j int)在这种情况下,这看起来像:type ExternalType struct {&nbsp; &nbsp;quantity int}type ExternalArray []*ExternalTypefunc (ea ExternalArray) Len() int {&nbsp; &nbsp; return len(ea)}func (ea ExternalArray) Less(i, j int) bool {&nbsp; &nbsp; return ea[i].quantity < ea[j].quantity}func (ea ExternalArray) Swap(i, j int) {&nbsp; &nbsp; ea[i], ea[j] = ea[j], ea[i]}为了进行排序,您可以使用sort.Sort,例如:arr := ExternalArray{&nbsp; &nbsp; &ExternalType{quantity: 33},&nbsp; &nbsp; &ExternalType{quantity: 44},&nbsp; &nbsp; &ExternalType{quantity: 22},&nbsp; &nbsp; &ExternalType{quantity: 11},}sort.Sort(arr)// `arr` is now sorted :-)这是操场上的一个工作示例。

慕尼黑8549860

在当前包中定义一个类型,该类型对与导入类型具有相同元素类型的切片进行排序:type byQuantity []*pkg.ExternalTypefunc (a byQuantity) Len() int&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ return len(a) }func (a byQuantity) Swap(i, j int)&nbsp; &nbsp; &nbsp; { a[i], a[j] = a[j], a[i] }func (a byQuantity) Less(i, j int) bool { return a[i].Quantity < a[j].Quantity }将导入的切片类型值转换为上面定义的类型并排序:a := pkg.ExternalArray{{1}, {3}, {2}}sort.Sort(byQuantity(a))// a is now sorted by quantity由于原始切片和转换后的切片共享相同的后备数组,因此对转换后的切片进行排序也会对原始切片进行排序。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go