作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个导入的类型
type ExternalType struct {
quantity int
}
type ExternalArray []*ExternalType
我希望能够为 ExternalArray 实现排序接口(interface),以便按数量对其进行排序。
但是,我不确定我该怎么做?
一个具体的例子是这样的:
最佳答案
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 {
quantity int
}
type ExternalArray []*ExternalType
func (ea ExternalArray) Len() int {
return len(ea)
}
func (ea ExternalArray) Less(i, j int) bool {
return ea[i].quantity < ea[j].quantity
}
func (ea ExternalArray) Swap(i, j int) {
ea[i], ea[j] = ea[j], ea[i]
}
为了进行排序,您可以使用 sort.Sort
,例如:
arr := ExternalArray{
&ExternalType{quantity: 33},
&ExternalType{quantity: 44},
&ExternalType{quantity: 22},
&ExternalType{quantity: 11},
}
sort.Sort(arr)
// `arr` is now sorted :-)
Here是 Playground 上的一个工作示例。
关于go - 如何将函数扩展到 Golang 中的导入类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35442911/
我是一名优秀的程序员,十分优秀!