...
1 package utils
2
3 import (
4 "reflect"
5 )
6
7
8 type ArrayComparer struct {
9 elements_in_array_1_but_not_2 []int
10 elements_in_array_2_but_not_1 []int
11 }
12
13
18 func CompareArray(array1, array2 interface{}, comp func(i, j int) bool) *ArrayComparer {
19 res := &ArrayComparer{}
20 l1 := reflect.ValueOf(array1).Len()
21 l2 := reflect.ValueOf(array2).Len()
22
23 for i := 0; i < l1; i++ {
24
25 found := false
26 for j := 0; j < l2; j++ {
27 if comp(i, j) {
28 found = true
29 break
30 }
31 }
32 if !found {
33 res.elements_in_array_1_but_not_2 = append(res.elements_in_array_1_but_not_2, i)
34 }
35 }
36
37
38 for j := 0; j < l2; j++ {
39
40 found := false
41 for i := 0; i < l1; i++ {
42 if comp(i, j) {
43 found = true
44 break
45 }
46 }
47 if !found {
48 res.elements_in_array_2_but_not_1 = append(res.elements_in_array_2_but_not_1, j)
49 }
50 }
51
52 return res
53 }
54
55
56 func (ac *ArrayComparer) EqualElements() bool {
57 if len(ac.elements_in_array_1_but_not_2) == 0 && len(ac.elements_in_array_2_but_not_1) == 0 {
58 return true
59 }
60 return false
61 }
62
63
64 func (ac *ArrayComparer) ElementsIn1ButNot2() []int {
65 return ac.elements_in_array_1_but_not_2
66 }
67
68
69 func (ac *ArrayComparer) ElementsIn2ButNot1() []int {
70 return ac.elements_in_array_2_but_not_1
71 }
72
View as plain text