golang按第一个元素对切片排序

golang按第一个元素对切片排序,go,slice,Go,Slice,我试图对我的切片子对象(在切片中)进行排序,我的切片是从中创建的 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 2

我试图对我的切片子对象(在切片中)进行排序,我的切片是从中创建的

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]]

问题并没有说明应该如何处理空片段,因此在传统的单词排序中,将它们视为空单词,将它们放在第一位,这样就可以处理边缘情况:

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]
})
导入“排序”
sort.Slice(s,func(i,j int)bool{
//边缘案例
如果len(s[i])==0&&len(s[j])==0{
返回false//两个空切片-因此一个不小于另一个,即false
}
如果len(s[i])==0 | | len(s[j])==0{
return len(s[i])==0//列出“第一个”的空切片(更改为!=0以将其放在最后)
}
//两个切片len()都大于0,因此现在可以进行测试:
返回s[i][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]
})
导入“排序”
sort.Slice(s,func(i,j int)bool{
//边缘案例
如果len(s[i])==0&&len(s[j])==0{
返回false//两个空切片-因此一个不小于另一个,即false
}
如果len(s[i])==0 | | len(s[j])==0{
return len(s[i])==0//列出“第一个”的空切片(更改为!=0以将其放在最后)
}
//两个切片len()都大于0,因此现在可以进行测试:
返回s[i][0]

游乐场。

可能重复@JimB这里有一个有趣的边案例,因为被排序的元素可能是空的,所以sort.Slice函数比引用的重复答案更有趣。@colminator:我不确定这有多有趣,因为您是否需要检查边界应该是显而易见的。这实际上只是定期发布的“如何按Y对X进行排序”的一种形式,我们不需要对X和Y的每种可能的类型和字段组合都给出单独的答案。在某些情况下,您需要能够应用文档。(也就是说,如果你觉得它值得一个答案,请继续投票重新打开;)@JimB的可能重复这里有一个有趣的边缘案例,因为被排序的元素可能是空的,所以sort.Slice函数比引用的重复答案更有趣。@colminator:我不确定这有多有趣,因为你是否需要检查边界是显而易见的。这实际上只是定期发布的“如何按Y对X进行排序”的一种形式,我们不需要对X和Y的每种可能的类型和字段组合都给出单独的答案。在某些情况下,您需要能够应用文档。(也就是说,如果你觉得它值得回答,那就投票重新开放吧;)