Как сделать срез элементов с индексами и отсортировать
У меня есть массив [10, 65, 21, 19, 43]
array := []int{10, 65, 21, 19, 43}
Мне нужно сделать массив вида (value, index): [[10, 0], [65, 1], [21, 2], [19, 3], [43, 4]]
По сути, как в Python через enumerate: [(v, i) for v, i in enumerate(array)]
А потом, также как в Python отсортировать его: по value. Можно просто написать array.sort()
Как также сделать в Golang? Не понимаю, как добавить слайс в слайс и, к тому же, отсортировать по первому значению, дошел только до функции range, но он раскрывает слайс, что логично. Если не раскрывать, то кидает ошибку:
nums := []int{10, 65, 21, 19, 43}
data := make([]int, 5)
for index, value := range nums {
data = append(data, []int{index, value}...)
}
return data
Ответы (1 шт):
Автор решения: Daniel Protopopov
→ Ссылка
Пример решения:
package main
import (
"fmt"
"sort"
)
type Matrix [][]int
func main() {
data := []int{10, 65, 21, 19, 43}
var matrix [][]int
for index, value := range data {
matrix = append(matrix, []int{value, index})
}
sort.SliceStable(matrix, func(i, j int) bool {
return matrix[i][0] < matrix[j][0]
})
fmt.Println(matrix)
}
Результат: [[10 0] [19 3] [21 2] [43 4] [65 1]]
Program exited.