开箱切片时切片

时间:2019-09-13 14:50:42

标签: go

我有以下代码

func Sum(a []int) int {
    res := 0
    for _, n := range a {
        res += n
    }
    return res
}

func SumAll(ns ...[]int) (sums []int) {
    for _, s := range ns {
        sums = append(sums, Sum(s))
    }
    return
}

//SumAllTails sums [:1] in each slice
func SumAllTails(sls ...[]int) []int {
    newsls := [][]int{}
    for _, sl := range sls {
        newsls = append(newsls, sl[1:])
    }
    return SumAll(newsls...)
}

理想情况下,我想将最后一个功能更改为类似的内容

func SumAllTails(sls ...[]int) []int {
    return SumAll(sls[:][1:]...)
}

最后一位返回第一个切片,但第一个返回,但是我要做的是从位置1开始解压缩每个切片,忽略0的值。有没有办法实现这一目标?

1 个答案:

答案 0 :(得分:3)

我认为无需先经过切片就可以做自己想要的事情的唯一方法是编写SumAlln函数:

func SumAlln(n int, ns ...[]int) (sums []int) {
    for _, s := range ns {
        sums = append(sums, Sum(s[n:]))
    }
    return
}

func SumAll(ns...[]int) []int {
    return SumAlln(0,ns...)
}

然后致电SumAlln