-
-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathintersperse.go
More file actions
23 lines (21 loc) · 640 Bytes
/
intersperse.go
File metadata and controls
23 lines (21 loc) · 640 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package underscore
// Intersperse inserts a separator between each element of the slice.
// Returns an empty slice if the input is empty.
// Returns the original element if the input has only one element.
//
// Example: Intersperse([]int{1,2,3}, 0) → [1, 0, 2, 0, 3]
func Intersperse[T any](values []T, separator T) []T {
if len(values) == 0 {
return []T{}
}
if len(values) == 1 {
return []T{values[0]}
}
// Result will have len(values) + (len(values)-1) elements
res := make([]T, 0, len(values)*2-1)
res = append(res, values[0])
for i := 1; i < len(values); i++ {
res = append(res, separator, values[i])
}
return res
}