# check for equality on slices without order

## Issue

I am trying to find a solution to check for equality in 2 slices. Unfortanely, the answers I have found require values in the slice to be in the same order. For example, http://play.golang.org/p/yV0q1_u3xR evaluates equality to false.
I want a solution that lets `[]string{"a","b","c"} == []string{"b","a","c"}` evaluate to `true`.
MORE EXAMPLES
`[]string{"a","a","c"} == []string{"c","a","c"}` >>> `false`
`[]string{"z","z","x"} == []string{"x","z","z"}` >>> `true`

## Solution

Here is an alternate solution, though perhaps a bit verbose:

``````func sameStringSlice(x, y []string) bool {
if len(x) != len(y) {
return false
}
// create a map of string -> int
diff := make(map[string]int, len(x))
for _, _x := range x {
// 0 value for int is 0, so just increment a counter for the string
diff[_x]++
}
for _, _y := range y {
// If the string _y is not in diff bail out early
if _, ok := diff[_y]; !ok {
return false
}
diff[_y] -= 1
if diff[_y] == 0 {
delete(diff, _y)
}
}
return len(diff) == 0
}
``````

Try it on the Go Playground