# Adding arrays (from a map) to a slice of slices in Go

## Issue

I have a map with arrays for keys.
I want to add all of the keys/arrays to a slice of slices.

However, I am getting unexpected results.

Code:

``````package main

import "fmt"

func main() {
var finalResult [][]int

set := make(map[[2]int]int)
a, b, c := [2]int{1, 1}, [2]int{2, 2}, [2]int{3, 3}
set[a], set[b], set[c] = 1, 1, 1

fmt.Println("set: ", set)

for x := range set {

fmt.Println("\nfinalResult 0: ", finalResult)
fmt.Println("x: ", x[:])

finalResult = append(finalResult, x[:])

fmt.Println("finalResult 1: ", finalResult)

}
}
``````

Output:

``````set:  map[[1 1]:1 [2 2]:1 [3 3]:1]

finalResult 0:  []
x:  [1 1]
finalResult 1:  [[1 1]]

finalResult 0:  [[2 2]]
x:  [2 2]
finalResult 1:  [[2 2] [2 2]]

finalResult 0:  [[3 3] [3 3]]
x:  [3 3]
finalResult 1:  [[3 3] [3 3] [3 3]]
``````

finalResult appears to be changing during the for loop?

Can someone explain what is happening and how I can work around this issue?

## Solution

The problem is, that you append the `x` local variable to the `finalResult`, which is a pointer, so in every for loop, the `x` will point to a new array in the memory. When you add this `x` three times to the finalResult and print it, all the three `x` will be points to the same memory address. You have to copy the content where `x` points in every loop to a new variable and add this to the finalResult.

``````package main

import "fmt"

func main() {
var finalResult [][]int

set := make(map[[2]int]int)
a, b, c := [2]int{1, 1}, [2]int{2, 2}, [2]int{3, 3}
set[a], set[b], set[c] = 1, 1, 1

fmt.Println("set: ", set)

for x := range set {

fmt.Println("\nfinalResult 0: ", finalResult)
fmt.Println("x: ", x[:])

a := make([]int, 2)
copy(a, x[:])
finalResult = append(finalResult, a)

fmt.Println("finalResult 1: ", finalResult)
}
}
``````

But be aware, that ranging over a map will be always in random order, so your final result may change on every run.