diff --git a/slice/slice.go b/slice/slice.go index f140e99..eafb17b 100644 --- a/slice/slice.go +++ b/slice/slice.go @@ -851,3 +851,11 @@ func ToSlice[T any](value ...T) []T { } return out } + +// AppendIfAbsent only absent append the value +func AppendIfAbsent[T comparable](slices []T, value T) []T { + if !Contain(slices, value) { + slices = append(slices, value) + } + return slices +} diff --git a/slice/slice_test.go b/slice/slice_test.go index 543c60f..e2510ee 100644 --- a/slice/slice_test.go +++ b/slice/slice_test.go @@ -609,3 +609,11 @@ func TestToSlicePointer(t *testing.T) { assert.Equal([]*string{&str1}, ToSlicePointer(str1)) assert.Equal([]*string{&str1, &str2}, ToSlicePointer(str1, str2)) } + +func TestToAppendIfAbsent(t *testing.T) { + assert := internal.NewAssert(t, "TestToAppendIfAbsent") + + str1 := []string{"a", "b"} + assert.Equal([]string{"a", "b"}, AppendIfAbsent(str1, "a")) + assert.Equal([]string{"a", "b", "c"}, AppendIfAbsent(str1, "c")) +}