2 回答
TA贡献1841条经验 获得超3个赞
在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 :-)
这是操场上的一个工作示例。
TA贡献1818条经验 获得超11个赞
在当前包中定义一个类型,该类型对与导入类型具有相同元素类型的切片进行排序:
type byQuantity []*pkg.ExternalType
func (a byQuantity) Len() int { return len(a) }
func (a byQuantity) Swap(i, j int) { 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
由于原始切片和转换后的切片共享相同的后备数组,因此对转换后的切片进行排序也会对原始切片进行排序。
- 2 回答
- 0 关注
- 171 浏览
添加回答
举报