Авг
02
2022

Как развернуть слайс в Golang

Алгоритм многим известен, есть реализации под множество языков, но под Go я не нашел.

Суть алгоритма: проходим от начала до середины слайса, элементы в конце слайса и в начале меняем местами.

Код программы:

package main

import (
	"fmt"
	"reflect"
)

func main() {
	// исходные слайсы
	s := []int{1, 2, 3, 4, 5}
	s2 := []int{1, 2, 3, 4, 5, 6}

	// переворачиваем
	revert(s)
	revert(s2)

	// выводим
	fmt.Println(s, s2)
}

// revert ничего не возвращает, потому что меняет исходный слайс
func revert(s []int) {
	length := len(s)
	// swapper - инструмент для перестановки элементов в слайсе
	swapper := reflect.Swapper(s)
	for i := 0; i < length/2; i++ {
		// меняем местами первый и последний элементы, второй и предпоследний...
		swapper(i, length-i-1)
	}
}

Результат работы программы:

[5 4 3 2 1] [6 5 4 3 2 1]
Пожалуйста, оцените на сколько вам понравилась статья!
Голосов: 3 Среднее: 5