Go 언어의 슬라이스는 매우 일반적으로 사용되며 쉽게 추가, 삭제, 수정할 수 있습니다. 그러나 때로는 슬라이스 요소를 반전시켜야 합니다. 예를 들어 {1, 2, 3, 4, 5}를 {5, 4, 3, 2, 1}로 반전합니다. 이 기사에서는 Go 언어를 사용하여 구현하는 방법을 소개합니다. 슬라이싱.
슬라이스 반전은 실제로 슬라이스의 요소를 역순으로 배열하는 것이며, 이는 루프를 사용하여 달성할 수 있습니다. 구체적인 방법은 슬라이스의 첫 번째 요소를 끝으로 이동하고 두 번째 요소를 두 번째에서 마지막으로 이동하는 것입니다. 슬라이스의 길이가 홀수인 경우 중간 요소를 교체할 필요가 없다는 점에 유의해야 합니다.
다음은 루프를 사용한 코드 구현입니다.
func reverse(s []int) { for i := 0; i < len(s)/2; i++ { j := len(s) - i - 1 s[i], s[j] = s[j], s[i] } }
코드의 reverse 함수는 int 유형의 슬라이스를 매개변수로 받아 이 슬라이스를 반전시킵니다. 먼저 for 루프를 사용하여 슬라이스 요소의 전반부를 순회하고 이를 해당 마지막 요소와 교환합니다. 슬라이스의 마지막 요소의 인덱스는 len(s)-1이고, i에 해당하는 마지막 요소의 인덱스는 len(s)-i-1이므로 인덱스 j는 len(s)-i-1에 의해 얻어집니다. 번째 요소는 len(s) -i-1입니다. 슬라이스 길이가 홀수인 경우 중간 요소를 교체할 필요가 없습니다.
이 함수를 사용하여 모든 길이의 int 유형 슬라이스를 뒤집을 수 있습니다. 예:
func main() { s1 := []int{1,2,3,4,5} reverse(s1) fmt.Println(s1) s2 := []int{2,4,6,8,10,12} reverse(s2) fmt.Println(s2) }
출력 결과는 다음과 같습니다.
[5 4 3 2 1] [12 10 8 6 4 2]
루프를 사용하는 것 외에도 표준 라이브러리 함수를 사용하여 라이브러리는 슬라이스를 반전하는 기능도 제공합니다. 이 함수는 sort 패키지에 정의되어 있으며 다음과 같이 사용됩니다.
package main import ( "fmt" "sort" ) func main() { s1 := []int{1,2,3,4,5} sort.Slice(s1, func(i, j int) bool { return i > j }) fmt.Println(s1) s2 := []int{2,4,6,8,10,12} sort.Slice(s2, func(i, j int) bool { return i > j }) fmt.Println(s2) }
코드의 sort.Slice 함수는 두 개의 매개변수를 받습니다. 첫 번째 매개변수는 반전할 슬라이스이고, 두 번째 매개변수는 정의하는 데 사용됩니다. 반전의 규칙. 이 함수에서는 i가 j보다 크면 true를 반환하여 i와 j를 앞으로 바꿔야 함을 나타냅니다.
sort.Slice 함수는 sort.Interface 인터페이스를 준수하는 유형에서만 작동할 수 있으므로 슬라이스의 요소 유형은 Len, Less 및 Swap 메소드를 구현해야 합니다. int 유형의 슬라이스에 대해 이러한 메소드를 구현했으므로 sort.Slice 함수를 직접 사용하여 역방향 작업을 수행할 수 있습니다.
sort.Slice 함수를 사용하여 슬라이스를 반전시키세요. 코드는 다음과 같습니다.
[5 4 3 2 1] [12 10 8 6 4 2]
두 가지 방법 모두 실제 상황에 따라 어떤 방법을 사용할지 쉽게 선택할 수 있습니다. 한 번만 되돌려야 한다면 루프 방식을 사용하는 것이 좋습니다. 여러 번 되돌려야 한다면 sort.Slice 함수를 사용하는 것이 좋습니다. 정렬 규칙을 재사용하고 효율성을 높일 수 있기 때문입니다.
위 내용은 골랑 슬라이스 리버스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!