# golang sort slices of slice by first element

## Issue

i’m trying to do sorting for my slice child’s (inside a slice), my slice is created from

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

how to sort it’s value by first element to become :

``````[[1 200 160 40] [2 60 55 5] [4 45 35 10]]
``````

## Solution

The question does not state what should be done with empty slices, so treating them like an empty word in a conventional word-sort, would put them first, so this would handle that edge case:

``````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] < s[j]
})
``````

Playground version.

Answered By – colm.anseo

Answer Checked By – Marie Seifert (GoLangFix Admin)