type MyObject stringvar objects []MyObject我想对这些对象进行排序。标准库有sort.Strings,但这需要一个[]string代替 的实例[]MyObject。我当前的解决方案是实现sort.Interface(如下所示)并使用sort.Sort,但我想摆脱该样板代码。有更好的方法吗?type MyObjects []MyObjectfunc (objs MyObjects) Len() int { return len(objs)}func (objs MyObjects) Less(i, j int) bool { return strings.Compare(string(objs[i]), string(objs[j])) < 0}func (objs MyObjects) Swap(i, j int) { o := objs[i] objs[i] = objs[j] objs[j] = o}
2 回答
PIPIONE
TA贡献1829条经验 获得超9个赞
如果您的MyObject
类型是string
其基础类型的“别名” ,则不能。在此处查看@JimB 的回答。
的底层类型MyObject
与的底层类型string
(它本身就是string
:)[]MyObject
相同,但 的底层类型与 的底层类型不同[]string
。
但是如果你碰巧重构了一点你的类型系统,你的问题就会消失:
type MyObjects []string
var objects MyObjects
func main() {
objects = MyObjects{"abc", "aaa"}
sort.Strings(objects)
fmt.Println(objects)
}
输出(在 上试试Go Playground):
[aaa abc]
为方便起见,Sort()如果您想,您甚至可以提供一个方法:
func (m MyObjects) Sort() {
sort.Strings(m)
}
并使用它:
objects = MyObjects{"abc", "aaa"}
objects.Sort()
fmt.Println(objects)
(输出相同。)
- 2 回答
- 0 关注
- 145 浏览
添加回答
举报
0/150
提交
取消