Browse Source

添加删除重复元素

yjp 1 year ago
parent
commit
1084449026
2 changed files with 46 additions and 0 deletions
  1. 20 0
      slice/slice.go
  2. 26 0
      slice/slice_test.go

+ 20 - 0
slice/slice.go

@@ -0,0 +1,20 @@
+package slice
+
+func RemoveRepeatElement[T comparable](elements []T) []T {
+	if elements == nil || len(elements) == 0 {
+		return elements
+	}
+
+	result := make([]T, 0)
+	tempMap := make(map[T]interface{})
+	for _, element := range elements {
+		l := len(tempMap)
+		tempMap[element] = nil
+
+		if len(tempMap) != l {
+			result = append(result, element)
+		}
+	}
+
+	return result
+}

+ 26 - 0
slice/slice_test.go

@@ -0,0 +1,26 @@
+package slice
+
+import "testing"
+
+func TestRemoveRepeatElement(t *testing.T) {
+	strSlice := []string{"1", "2", "1", "3", "2", "4", "3"}
+	intSlice := []int{1, 2, 1, 3, 2, 4, 3}
+
+	strSliceRemovedRepeatElement := RemoveRepeatElement(strSlice)
+
+	if strSliceRemovedRepeatElement[0] != "1" ||
+		strSliceRemovedRepeatElement[1] != "2" ||
+		strSliceRemovedRepeatElement[2] != "3" ||
+		strSliceRemovedRepeatElement[3] != "4" {
+		t.Fatal("字符串slice移除元素后不正确")
+	}
+
+	intSliceRemovedRepeatElement := RemoveRepeatElement(intSlice)
+
+	if intSliceRemovedRepeatElement[0] != 1 ||
+		intSliceRemovedRepeatElement[1] != 2 ||
+		intSliceRemovedRepeatElement[2] != 3 ||
+		intSliceRemovedRepeatElement[3] != 4 {
+		t.Fatal("整型slice移除元素后不正确")
+	}
+}