func SlicesDeepEqual(slice1, slice2 interface{}) bool {
	s1 := reflect.ValueOf(slice1)
	s2 := reflect.ValueOf(slice2)

	if s1.Len() != s2.Len() {
		return false
	}
	if s1.Len() == 0 {
		return true
	}

	s2found := make([]int, s2.Len())
OuterLoop:
	for i := 0; i < s1.Len(); i++ {
		s1el := s1.Slice(i, i+1)
		for j := 0; j < s2.Len(); j++ {
			if s2found[j] == 1 {
				// We already counted this s2 element
				continue
			}
			s2el := s2.Slice(j, j+1)
			if reflect.DeepEqual(s1el.Interface(), s2el.Interface()) {
				s2found[j] = 1
				continue OuterLoop
			}
		}
		// Couldn't find something unused equal to s1
		return false
	}
	return true
}
func SlicesDeepEqual(slice1, slice2 interface{}) bool {
	s1 := reflect.ValueOf(slice1)
	s2 := reflect.ValueOf(slice2)

	if s1.Len() != s2.Len() {
		return false
	}
	if s1.Len() == 0 {
		return true
	}

	s2found := make([]int, s2.Len())
OuterLoop:
	for i := 0; i < s1.Len(); i++ {
		s1el := s1.Slice(i, i+1)
		for j := 0; j < s2.Len(); j++ {
			if s2found[j] == 1 {
				
				continue
			}
			s2el := s2.Slice(j, j+1)
			if reflect.DeepEqual(s1el.Interface(), s2el.Interface()) {
				s2found[j] = 1
				continue OuterLoop
			}
		}
		
		return false
	}
	return true
}
func SlicesDeepEqual ( slice1 , slice2 interface { } ) bool { s1 := reflect . ValueOf ( slice1 ) s2 := reflect . ValueOf ( slice2 ) if s1 . Len ( ) != s2 . Len ( ) { return false } if s1 . Len ( ) == 0 { return true } s2found := make ( [ ] int , s2 . Len ( ) ) OuterLoop : for i := 0 ; i < s1 . Len ( ) ; i ++ { s1el := s1 . Slice ( i , i + 1 ) for j := 0 ; j < s2 . Len ( ) ; j ++ { if s2found [ j ] == 1 { // We already counted this s2 element continue } s2el := s2 . Slice ( j , j + 1 ) if reflect . DeepEqual ( s1el . Interface ( ) , s2el . Interface ( ) ) { s2found [ j ] = 1 continue OuterLoop } } // Couldn't find something unused equal to s1 return false } return true }
// SlicesDeepEqual checks if slice1 and slice2 are equal, disregarding order.
SlicesDeepEqual checks if slice1 and slice2 are equal disregarding order .