fix issue 785 in function Unique for packge garray

This commit is contained in:
john
2020-07-10 22:26:02 +08:00
parent 98531143a6
commit 6712a33164
9 changed files with 52 additions and 20 deletions

View File

@ -494,9 +494,11 @@ func (a *Array) Search(value interface{}) int {
func (a *Array) Unique() *Array {
a.mu.Lock()
for i := 0; i < len(a.array)-1; i++ {
for j := i + 1; j < len(a.array); j++ {
for j := i + 1; j < len(a.array); {
if a.array[i] == a.array[j] {
a.array = append(a.array[:j], a.array[j+1:]...)
} else {
j++
}
}
}

View File

@ -510,9 +510,11 @@ func (a *IntArray) Search(value int) int {
func (a *IntArray) Unique() *IntArray {
a.mu.Lock()
for i := 0; i < len(a.array)-1; i++ {
for j := i + 1; j < len(a.array); j++ {
for j := i + 1; j < len(a.array); {
if a.array[i] == a.array[j] {
a.array = append(a.array[:j], a.array[j+1:]...)
} else {
j++
}
}
}

View File

@ -514,9 +514,11 @@ func (a *StrArray) Search(value string) int {
func (a *StrArray) Unique() *StrArray {
a.mu.Lock()
for i := 0; i < len(a.array)-1; i++ {
for j := i + 1; j < len(a.array); j++ {
for j := i + 1; j < len(a.array); {
if a.array[i] == a.array[j] {
a.array = append(a.array[:j], a.array[j+1:]...)
} else {
j++
}
}
}

View File

@ -95,9 +95,9 @@ func TestArray_Sort(t *testing.T) {
func TestArray_Unique(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
expect := []interface{}{1, 1, 2, 3}
expect := []interface{}{1, 2, 3, 4, 5, 3, 2, 2, 3, 5, 5}
array := garray.NewArrayFrom(expect)
t.Assert(array.Unique().Slice(), []interface{}{1, 2, 3})
t.Assert(array.Unique().Slice(), []interface{}{1, 2, 3, 4, 5})
})
}

View File

@ -87,9 +87,9 @@ func TestIntArray_Sort(t *testing.T) {
func TestIntArray_Unique(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
expect := []int{1, 1, 2, 3}
expect := []int{1, 2, 3, 4, 5, 3, 2, 2, 3, 5, 5}
array := garray.NewIntArrayFrom(expect)
t.Assert(array.Unique().Slice(), []int{1, 2, 3})
t.Assert(array.Unique().Slice(), []int{1, 2, 3, 4, 5})
})
}

View File

@ -91,7 +91,7 @@ func TestStrArray_Sort(t *testing.T) {
func TestStrArray_Unique(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
expect := []string{"1", "1", "2", "3"}
expect := []string{"1", "1", "2", "2", "3", "3", "2", "2"}
array := garray.NewStrArrayFrom(expect)
t.Assert(array.Unique().Slice(), []string{"1", "2", "3"})
})

View File

@ -526,15 +526,21 @@ func TestSortedArray_CountValues(t *testing.T) {
func TestSortedArray_SetUnique(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
a1 := []interface{}{"a", "d", "c", "c"}
func1 := func(v1, v2 interface{}) int {
return strings.Compare(gconv.String(v1), gconv.String(v2))
}
array1 := garray.NewSortedArrayFrom(a1, func1)
a1 := []interface{}{1, 2, 3, 4, 5, 3, 2, 2, 3, 5, 5}
array1 := garray.NewSortedArrayFrom(a1, gutil.ComparatorInt)
array1.SetUnique(true)
t.Assert(array1.Len(), 3)
t.Assert(array1, []interface{}{"a", "c", "d"})
t.Assert(array1.Len(), 5)
t.Assert(array1, []interface{}{1, 2, 3, 4, 5})
})
}
func TestSortedArray_Unique(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
a1 := []interface{}{1, 2, 3, 4, 5, 3, 2, 2, 3, 5, 5}
array1 := garray.NewSortedArrayFrom(a1, gutil.ComparatorInt)
array1.Unique()
t.Assert(array1.Len(), 5)
t.Assert(array1, []interface{}{1, 2, 3, 4, 5})
})
}

View File

@ -436,7 +436,7 @@ func TestSortedIntArray_CountValues(t *testing.T) {
func TestSortedIntArray_SetUnique(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
a1 := []int{1, 2, 3, 4, 5, 3}
a1 := []int{1, 2, 3, 4, 5, 3, 2, 2, 3, 5, 5}
array1 := garray.NewSortedIntArrayFrom(a1)
array1.SetUnique(true)
t.Assert(array1.Len(), 5)
@ -444,6 +444,16 @@ func TestSortedIntArray_SetUnique(t *testing.T) {
})
}
func TestSortedIntArray_Unique(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
a1 := []int{1, 2, 3, 4, 5, 3, 2, 2, 3, 5, 5}
array1 := garray.NewSortedIntArrayFrom(a1)
array1.Unique()
t.Assert(array1.Len(), 5)
t.Assert(array1, []int{1, 2, 3, 4, 5})
})
}
func TestSortedIntArray_LockFunc(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
s1 := []int{1, 2, 3, 4}

View File

@ -454,11 +454,21 @@ func TestSortedStrArray_Chunk(t *testing.T) {
func TestSortedStrArray_SetUnique(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
a1 := []string{"e", "a", "d", "a", "c"}
a1 := []string{"1", "1", "2", "2", "3", "3", "2", "2"}
array1 := garray.NewSortedStrArrayFrom(a1)
array2 := array1.SetUnique(true)
t.Assert(array2.Len(), 4)
t.Assert(array2, []string{"a", "c", "d", "e"})
t.Assert(array2.Len(), 3)
t.Assert(array2, []string{"1", "2", "3"})
})
}
func TestSortedStrArray_Unique(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
a1 := []string{"1", "1", "2", "2", "3", "3", "2", "2"}
array1 := garray.NewSortedStrArrayFrom(a1)
array1.Unique()
t.Assert(array1.Len(), 3)
t.Assert(array1, []string{"1", "2", "3"})
})
}