一尘不染

如何在进行中反转切片?

go

如何[]interface{}在Go中反转任意切片()?我宁愿不必编写LessSwap使用sort.Reverse。有没有简单的内置方法来做到这一点?


阅读 195

收藏
2020-07-02

共1个答案

一尘不染

没有一个简单的,内置的用于反转接口{}的部分。您可以编写一个for循环来做到这一点:

for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
    s[i], s[j] = s[j], s[i]
}

Go
1.8中引入的reflect.Swapper函数可用于编写通用的反转函数:

func reverseAny(s interface{}) {
    n := reflect.ValueOf(s).Len()
    swap := reflect.Swapper(s)
    for i, j := 0, n-1; i < j; i, j = i+1, j-1 {
        swap(i, j)
    }
}

游乐场的例子

2020-07-02