github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/pkg/util/list.go (about) 1 package util 2 3 func MergeStringLists(ss ...[]string) []string { 4 switch len(ss) { 5 case 0: 6 return nil 7 case 1: 8 return ss[0] 9 case 2: 10 return MergeStringPair(ss[0], ss[1]) 11 default: 12 n := len(ss) / 2 13 return MergeStringPair(MergeStringLists(ss[:n]...), MergeStringLists(ss[n:]...)) 14 } 15 } 16 17 func MergeStringPair(s1, s2 []string) []string { 18 i, j := 0, 0 19 result := make([]string, 0, len(s1)+len(s2)) 20 for i < len(s1) && j < len(s2) { 21 if s1[i] < s2[j] { 22 result = append(result, s1[i]) 23 i++ 24 } else if s1[i] > s2[j] { 25 result = append(result, s2[j]) 26 j++ 27 } else { 28 result = append(result, s1[i]) 29 i++ 30 j++ 31 } 32 } 33 for ; i < len(s1); i++ { 34 result = append(result, s1[i]) 35 } 36 for ; j < len(s2); j++ { 37 result = append(result, s2[j]) 38 } 39 return result 40 }