在golang推荐中切片合并

And*_*rin 2 go slice

有没有办法让这个golang代码更短?

func MergeSlices(s1 []float32, s2 []int32) []int {
    var slice []int
    for i := range s1 {
        slice = append(slice, int(s1[i]))
    }
    for i := range s2 {
        slice = append(slice, int(s2[i]))
    }
    return slice
}
Run Code Online (Sandbox Code Playgroud)

icz*_*cza 5

您无法消除将每个元素int单独转换的循环,因为您无法转换不同元素类型的整个切片.有关解释,请参阅此问题:在go中键入转换接口切片

您可以做的最多是使用命名结果类型,for range使用2个迭代值,您可以通过将第一个(索引)分配给空白标识符来省略第一个(索引),第二个将是值:

func MergeSlices(s1 []float32, s2 []int32) (s []int) {
    for _, v := range s1 {
        s = append(s, int(v))
    }
    for _, v := range s2 {
        s = append(s, int(v))
    }
    return
}
Run Code Online (Sandbox Code Playgroud)

但要知道你的代码是正常的.我的代码并不总是遵循,它是回答你的问题:如何缩短你的代码.如果您想改进代码,可以从查看其性能开始,甚至重构代码,最终不需要合并不同类型的切片.

  • I would definitively not recommend using named return to save one line. (4认同)