mirror of
https://github.com/grafana/loki.git
synced 2026-03-13 09:33:58 +08:00
41 lines
790 B
Go
41 lines
790 B
Go
package util //nolint:revive
|
|
|
|
func MergeStringLists(ss ...[]string) []string {
|
|
switch len(ss) {
|
|
case 0:
|
|
return nil
|
|
case 1:
|
|
return ss[0]
|
|
case 2:
|
|
return MergeStringPair(ss[0], ss[1])
|
|
default:
|
|
n := len(ss) / 2
|
|
return MergeStringPair(MergeStringLists(ss[:n]...), MergeStringLists(ss[n:]...))
|
|
}
|
|
}
|
|
|
|
func MergeStringPair(s1, s2 []string) []string {
|
|
i, j := 0, 0
|
|
result := make([]string, 0, len(s1)+len(s2))
|
|
for i < len(s1) && j < len(s2) {
|
|
if s1[i] < s2[j] {
|
|
result = append(result, s1[i])
|
|
i++
|
|
} else if s1[i] > s2[j] {
|
|
result = append(result, s2[j])
|
|
j++
|
|
} else {
|
|
result = append(result, s1[i])
|
|
i++
|
|
j++
|
|
}
|
|
}
|
|
for ; i < len(s1); i++ {
|
|
result = append(result, s1[i])
|
|
}
|
|
for ; j < len(s2); j++ {
|
|
result = append(result, s2[j])
|
|
}
|
|
return result
|
|
}
|