From 5e872bf4eb9a280f730999becb3fc9784ffc5efd Mon Sep 17 00:00:00 2001 From: Thuc Le Date: Mon, 3 Jan 2022 18:49:29 +0100 Subject: [PATCH] Fix group with correct group order --- group.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/group.go b/group.go index 4c816c6..a74ec4f 100644 --- a/group.go +++ b/group.go @@ -2,14 +2,19 @@ package goterators // Group groups elements into the nested level. Use a build-group function to define group type. func Group[T any, G comparable](source []T, buildGroup func(item T) G) [][]T { + groupOrder := make([]G, 0, len(source)) m := map[G][]T{} for index, item := range source { group := buildGroup(item) + _, existed := m[group] + if !existed { + groupOrder = append(groupOrder, group) + } m[group] = append(m[group], source[index]) } output := make([][]T, 0, len(m)) - for key := range m { + for _, key := range groupOrder { output = append(output, m[key]) } return output