golang按第一个元素排序切片

问题描述 投票:-1回答:1

我正在尝试为我的切片子进行排序(在切片内),我的切片是从中创建的

var s [][]int64
s = append(s, []int64{2, 60, 55, 5})
s = append(s, []int64{4, 45, 35, 10})
s = append(s, []int64{1, 200, 160, 40})
fmt.Println(s) # [[2 60 55 5] [4 45 35 10] [1 200 160 40]]

如何通过第一个元素对它的值进行排序:

[[1 200 160 40] [2 60 55 5] [4 45 35 10]]
go slice
1个回答
0
投票

问题并没有说明应该用空切片做什么,所以将它们视为传统单词排序中的空单词会将它们放在第一位,这样就可以处理边缘情况:

import "sort"

sort.Slice(s, func(i, j int) bool {
    // edge cases
    if len(s[i]) == 0 && len(s[j]) == 0 {
        return false // two empty slices - so one is not less than other i.e. false
    }
    if len(s[i]) == 0 || len(s[j]) == 0 {
        return len(s[i]) == 0 // empty slice listed "first" (change to != 0 to put them last)
    }

    // both slices len() > 0, so can test this now:
    return s[i][0] < s[j][0]
})

游乐场version

© www.soinside.com 2019 - 2024. All rights reserved.