Добавление одного массива в конец другого

Задача: Добавть один массив в другой

Как я хотел бы: Без использования циклов и рекурсии. Типы именно такие какие указаны в коде(a :=[10]int{}, b:= []int{})

Как я могу: К сожалению тольк так и то же самое но циклом:

package main

import "fmt"

func main() {
    a := [10]int{}
    b := []int{4, 5, 1, 8}
    i := len(a)
    j := len(b)
    fmt.Println(appendBtoA(a, b, i, j))
    //out: [0 0 0 0 0 0 4 5 1 8]
}

func appendBtoA(a [10]int, b []int, i, j int) [10]int {
    i -= 1
    j -= 1
    if j >= 0 {
        a[i] = b[j]
        return appendBtoA(a, b, i, j)
    }
    return a
}

Но мне бы хотелось сделать через дополнительный срез указывающий на a и без использования циклов и рекурсий.

по логике:

// естественно не рабочий вариант. но нужно приблизительно так.
func appendBtoA2(a, b []int) []int {
    c := a[len(a)-len(b):] //здесь `c` если правильно понимаю, указывает на `a`
    c = b //здесь `c`, вроде как указывает на `b`. 
          //потому начальный массив не меняется.
          //но это все не точно а лишь мое дилетантское предположение
    return a
}

За основу желаемого решения взял механизм:

package main

import "fmt"

func main(){
    a := [10]int{5, 4, 6, 7, 8, 2, 4, 5, 8, 5}
    b := a[4:6]
    b[0] = 0
    b[1] = 0
    fmt.Println(a) //out: [5 4 6 7 0 0 4 5 8 5]
}

Спасибо за внимание.


Ответы (2 шт):

Автор решения: Stanislav Volodarskiy

copy делает то что вам нужно:

package main

import "fmt"

func main() {
    a := [10]int{}
    b := []int{4, 5, 1, 8}
    copy(a[len(a)-len(b):], b)
    fmt.Printf("%v\n", a)
}
$ go run copy.go
[0 0 0 0 0 0 4 5 1 8]

P.S. То, что copy - глобальная функция, намекает, что по другому это сделать трудно. Я бы предпочёл синтаксис a[len(a)-len(b):] = b, заимствованный из Питона. Но чего нет, того нет.

→ Ссылка
Автор решения: u_mulder

C append-ом такой вариант

a := [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
b := []int{100, 200, 300}

pos := len(a) - len(b)
_ = append(a[pos:pos], b...)

fmt.Printf("%v; %v", a, b)
// [0 1 2 3 4 5 6 100 200 300]; [100 200 300]
→ Ссылка