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  }