package main import "fmt" func SliceToGroupsUpdated[T any](slice []T, limit int) [][]T { if limit < 1 { limit = 1 } matrix := [][]T{{}} row := 0 for _, val := range slice { matrix[row] = append(matrix[row], val) if len(matrix[row]) == limit { row++ matrix = append(matrix, []T{}) } } return matrix } func SliceToGroupsOrig[T any](vals []T, grpSize int) [][]T { if grpSize < 1 { grpSize = 1 } grps := make([][]T, 0) grp := make([]T, 0, grpSize) for _, val := range vals { grp = append(grp, val) if len(grp) >= grpSize { grps = append(grps, grp) grp = make([]T, 0, grpSize) } } return grps } func main() { grps := SliceToGroupsUpdated([]string{"a", "b", "c"}, 0) fmt.Println("updated", grps) grps = SliceToGroupsOrig([]string{"a", "b", "c"}, 0) fmt.Println("original", grps) }