golang 如何做类似python和js的自定义排序(多重条件排序、自定义数据结构排序)

参考golang中国相关评论,发现golang是具备自定义key lambda函数的,只不过写法上需要实现golang官方排序接口,写起来也不难很优雅

package main

import (
    "fmt"
    "sort"
)

type Test struct {
    a  int
    b int
    c int
}
type Tests []Test

func (t Tests) Len() int {
    return len(t)
}

func (t Tests) Less(i, j int) bool {
    if t[i].a < t[j].a {
        return true
    } else if t[i].a > t[j].a {
        return false
    }

    if t[i].b < t[j].b {
        return true
    } else if t[i].b > t[j].b {
        return false
    }

    return t[i].c < t[j].c
}

func (t Tests) Swap(i, j int) {
    temp := t[i]
    t[i] = t[j]
    t[j] = temp
}

func Sort(t sort.Interface) {
    sort.Sort(t)
}

func main() {


    test := Tests{}

    test = append(test, Test{0, 95, 5})
    test = append(test, Test{1, 90, 3})
    test = append(test, Test{1, 100, 4})
    test = append(test, Test{2, 95, 5})
    test = append(test, Test{2, 95, 1})
    test = append(test, Test{1, 90, 4})
    test = append(test, Test{1, 100, 1})
    test = append(test, Test{2, 95, 2})
    test = append(test, Test{2, 95, 3})
    Sort(test)

    for _, t := range test {
        fmt.Println(t)
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容