如何在Go中稳定反向排序切片?

洛伦佐·贝利:

我有

4, 5', 6, 5''

并希望将稳定排序反转为

6, 5', 5'', 4

但不是

6, 5'', 5', 4

此(无效)代码不起作用

keys := []int{4, 5', 6, 5''}
sort.Stable(sort.Reverse(sort.Ints(keys)))

它会产生:

6, 5'', 5', 4

在这里,问题被简化为整数切片,但实际上我需要将其应用于结构切片

type myStruct struct {
    t time.Time
    d time.Duration
}

并在t现场进行反向稳定排序


编辑:经过几句评论,我明确指出整数1是一个不起作用的示例,以简化问题。

沙里亚尔:

sort.Interface在您的自定义结构上实现接口。

type myStruct struct{
    t time.Time
    d time.Duration
}

type Slice []myStruct

func (s Slice) Len() int {  return len(s) }

func (s Slice) Less(i, j int) bool {
    return (s[i].t).After(s[j].t)
}

func (s Slice) Swap(i, j int) {
    s[i], s[j] = s[j], s[i]
}

在您的情况下,以下函数将基于以下顺序反向排序 t

func (s Slice) Less(i, j int) bool {
    return (s[i].t).After(s[j].t)
}

(s[i].t).After(s[j].t)报告是否s[i].t在之后s[j].t

如果只想排序,请使用以下一项

func (s Slice) Less(i, j int) bool {
    return (s[i].t).Before(s[j].t)
}

希望这会有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章