diff --git a/slice/slice.go b/slice/slice.go index 69f553a..c9ecd8f 100644 --- a/slice/slice.go +++ b/slice/slice.go @@ -618,6 +618,17 @@ func UnionBy[T any, V comparable](predicate func(item T) V, slices ...[]T) []T { return result } +// Merge all given slices into one slice +func Merge[T any](slices ...[]T) []T { + result := make([]T, 0) + + for _, item := range slices { + result = append(result, item...) + } + + return result +} + // Intersection creates a slice of unique values that included by all slices. func Intersection[T comparable](slices ...[]T) []T { if len(slices) == 0 { diff --git a/slice/slice_test.go b/slice/slice_test.go index 2d5b793..5414eb8 100644 --- a/slice/slice_test.go +++ b/slice/slice_test.go @@ -446,6 +446,18 @@ func TestUnionBy(t *testing.T) { assert.Equal(result, []int{0, 2, 4, 10}) } +func TestMerge(t *testing.T) { + assert := internal.NewAssert(t, "TestMerge") + + s1 := []int{1, 2, 3, 4} + s2 := []int{2, 3, 4, 5} + s3 := []int{4, 5, 6} + + assert.Equal([]int{1, 2, 3, 4, 2, 3, 4, 5, 4, 5, 6}, Merge(s1, s2, s3)) + assert.Equal([]int{1, 2, 3, 4, 2, 3, 4, 5}, Merge(s1, s2)) + assert.Equal([]int{2, 3, 4, 5, 4, 5, 6}, Merge(s2, s3)) +} + func TestIntersection(t *testing.T) { s1 := []int{1, 2, 2, 3} s2 := []int{1, 2, 3, 4}