亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何優雅地將數組的一部分復制到另一個數組中或注入到另一個數組中

如何優雅地將數組的一部分復制到另一個數組中或注入到另一個數組中

Go
三國紛爭 2023-05-15 14:39:48
我有以下有效的代碼,但這里的要點是我想將一個任意長度的數組注入或插入到另一個擴展其長度的靜態大小的數組中:package mainimport (    "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
查看完整描述

3 回答

?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

講優雅有些自以為是,但可以提出KISS原則。順便說一句,您可以對切片使用更簡單的方法,不需要您猜測輸出數組的大小:

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)


查看完整回答
反對 回復 2023-05-15
?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

由于您要附加到輸出,我建議這樣做(簡單且一致)并設置最大容量:


out := make([]string, 0, 12)

out = append(out, in[0:3]...)

out = append(out, []string{"-i", "inaudio", "-c:a", "aac"}...)

out = append(out, in[3:8]...)

看:


package main


import (

    "fmt"

)


func main() {

    in := []string{

        "-y",

        "-i", "invideo",

        // ffmpegAudioArguments...,

        "-c:v", "copy",

        "-strict", "experimental",

        "outvideo",

    }


    out := make([]string, 0, 12)

    out = append(out, in[0:3]...)

    out = append(out, []string{"-i", "inaudio", "-c:a", "aac"}...)

    out = append(out, in[3:8]...)


    fmt.Println(in)

    fmt.Println(out)

}

結果:


[-y -i invideo -c:v copy -strict experimental outvideo]

[-y -i invideo -i inaudio -c:a aac -c:v copy -strict experimental outvideo]


查看完整回答
反對 回復 2023-05-15
?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

看起來第一個賦值指向 haystack 數組,隨后的步驟修改了切片haystack:


// arrayInject is a helper function written by Alirus on StackOverflow in my

// inquiry to find a way to inject one array into another _elegantly_:

func arrayInject(haystack, pile []string, at int) (result []string) {

? ? result = make([]string, len(haystack[:at]))

? ? copy(result, haystack[:at])

? ? result = append(result, pile...)

? ? result = append(result, haystack[at:]...)


? ? return result

}


查看完整回答
反對 回復 2023-05-15
  • 3 回答
  • 0 關注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號