arrays - 如何优雅地将数组的一部分复制到另一个数组中或注入(inject)到另一个数组中

标签 arrays go insert

我有以下有效的代码,但这里的要点是我想将一个任意长度的数组注入(inject)或插入到另一个扩展其长度的静态大小的数组中:

package main

import (
    "fmt"
)

func main() {
    ffmpegArguments := []string{
        "-y",
        "-i", "invideo",
        // ffmpegAudioArguments...,
        "-c:v", "copy",
        "-strict", "experimental",
        "outvideo",
    }

    var outputArguments [12]string
    copy(outputArguments[0:3], ffmpegArguments[0:3])
    copy(outputArguments[3:7], []string{"-i", "inaudio", "-c:a", "aac"})
    copy(outputArguments[7:12], ffmpegArguments[3:8])

    fmt.Printf("%#v\n", ffmpegArguments)
    fmt.Printf("%#v\n", outputArguments)
}

https://play.golang.org/p/peQXkOpheK4

最佳答案

谈论优雅 有点固执己见,但人们可能会想到 KISS原则。顺便说一句,您可以对 slice 使用更简单的方法,它不需要您猜测输出数组的大小:

func inject(haystack, pile []string, at int) []string {
    result := haystack[:at]
    result = append(result, pile...)
    result = append(result, haystack[at:]...)

    return result
}

然后,按如下方式重写您的代码:

ffmpegArguments := []string{
    "-y",
    "-i", "invideo",
    "-c:v", "copy",
    "-strict", "experimental",
    "outvideo",
}

outputArguments := inject(ffmpegArguments, []string{"-i", "inaudio", "-c:a", "aac"}, 3)

fmt.Printf("%#v\n", ffmpegArguments)
fmt.Printf("%#v\n", outputArguments)

关于arrays - 如何优雅地将数组的一部分复制到另一个数组中或注入(inject)到另一个数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53646926/

相关文章:

C# 在一个字符串查询中插入并选择

javascript - 在 Jquery 中使用数组

javascript - 将属性添加到对象数组

golang 中的 HTML 模板

go - 提供包 <package_name> 的模块缺少 go.sum 条目

go - 函数结束后,golang没有释放变量

Mysql 阻止在某个日期之后插入

python - Numpy 数组 python 维度统一

c++ - 链表数组 C++

javascript - 两个下拉列表并用PHP保存在数据库中