Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Function for copying arrays in Go language

Tags:

arrays

go

Is there any built-in function in Go for copying one array to another? Will this work in case of two (or more) dimensional arrays?

like image 682
angry_gopher Avatar asked Sep 01 '13 15:09

angry_gopher


People also ask

How do you copy an array in Go?

Golang does not provide a specific inbuilt function to copy one array into another array. But we can create a copy of an array by simply assigning an array to a new variable by value or by reference.

Which method allows you to make a copy of an array?

splice . It returns a new array copying to it all items from index start to end (not including end ).


1 Answers

Is there any built-in function in Go language for copying one array to another?

Yes: http://play.golang.org/p/_lYNw9SXN5

a := []string{     "hello",     "world", } b := []string{     "goodbye",     "world", }  copy(a, b)  // a == []string{"goodbye", "world"} 

Will this work in case of two (or more) dimensional arrays?

copy will do a shallow copy of the rows: http://play.golang.org/p/0gPk6P1VWh

a := make([][]string, 10)  b := make([][]string, 10) for i := range b {     b[i] = make([]string, 10)     for j := range b[i] {         b[i][j] = strconv.Itoa(i + j)     } }  copy(a, b)  // a and b look the same  b[1] = []string{"some", "new", "data"}  // b's second row is different; a still looks the same  b[0][0] = "apple"  // now a looks different 

I don't think there's a built-in for doing deep-copys of multi-dimensional arrays: you can do it manually like: http://play.golang.org/p/nlVJq-ehzC

a := make([][]string, 10)  b := make([][]string, 10) for i := range b {     b[i] = make([]string, 10)     for j := range b[i] {         b[i][j] = strconv.Itoa(i + j)     } }  // manual deep copy for i := range b {     a[i] = make([]string, len(b[i]))     copy(a[i], b[i]) }  b[0][0] = "apple"  // a still looks the same 

edit: As pointed out in the comments, I assumed by "copy an array" you meant "do a deep copy of a slice", as arrays can be deep-copied with the = operator as per jnml's answer (because arrays are value types): http://play.golang.org/p/8EuFqXnqPB

like image 148
alecbz Avatar answered Oct 03 '22 01:10

alecbz