Development Tip

Go에서 슬라이스를 반대로 반복하는 방법이 있습니까?

yourdevel 2020. 10. 18. 19:42
반응형

Go에서 슬라이스를 반대로 반복하는 방법이 있습니까?


다음과 같이 말할 수 있으면 편리합니다.

for _, element in reverse range mySlice {
        ...
}

범위 1에 추가 할 편리한 연산자가 없습니다. 일반적인 for 루프 카운트 다운을 수행해야합니다.

s := []int{5, 4, 3, 2, 1}
for i := len(s)-1; i >= 0; i-- {
   fmt.Println(s[i])
}

다음을 수행 할 수도 있습니다.

s := []int{5, 4, 3, 2, 1}
for i := range s {
        fmt.Println(s[len(s)-1-i]) // Suggestion: do `last := len(s)-1` before the loop
}

산출:

1
2
3
4
5

또한 여기 : http://play.golang.org/p/l7Z69TV7Vl


색인이있는 변형

for k := range s {
        k = len(s) - 1 - k
        // now k starts from the end
    }

사용 연기 방법 :

s := []int{5, 4, 3, 2, 1}
for i, _ := range s {
   defer fmt.Println(s[i])
}

하나는 채널을 사용하여 복제하지 않고 함수의 목록을 반전시킬 수 있습니다. 내 의미에서 코드를 더 멋지게 만듭니다.

package main

import (
    "fmt"
)

func reverse(lst []string) chan string {
    ret := make(chan string)
    go func() {
        for i, _ := range lst {
            ret <- lst[len(lst)-1-i]
        }
        close(ret)
    }()
    return ret
}

func main() {
    elms := []string{"a", "b", "c", "d"}
    for e := range reverse(elms) {
        fmt.Println(e)
    }
}

참고 URL : https://stackoverflow.com/questions/13190836/is-there-a-way-to-iterate-over-a-slice-in-reverse-in-go

반응형