package util 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 }