为了账号安全,请及时绑定邮箱和手机立即绑定

如何对元素类型是字符串别名而不是字符串本身的 Go 切片进行排序?

如何对元素类型是字符串别名而不是字符串本身的 Go 切片进行排序?

Go
明月笑刀无情 2021-11-01 16:38:07
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)

(输出相同。)


查看完整回答
反对 回复 2021-11-01
  • 2 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信