Golang如何实现字符串数组按长度+字典序组合排序
你采用的分两次排序的实现方式存在问题。Go标准库的sort.Slice默认使用不稳定排序,第二次按长度排序时,并不会保留相同长度元素之前的字典序排序结果,也不符合多优先级排序的最优实现逻辑。
正确实现方式
多优先级排序需要在同一个比较函数中按优先级依次判断排序规则:第一优先级判断字符串长度,短的排在前面;长度相等时触发第二优先级,按字符串字典序升序排列。
示例代码如下:
package main import ( "fmt" "sort" "strings" ) func main() { // 原始输入 inputStr := "2 22 2H 2J 2J2 2J3 2J322422 2J322423 2J33 2M 2P 2W 2X" values := strings.Split(inputStr, " ") // 执行双规则排序 sort.Slice(values, func(i, j int) bool { // 第一优先级:按长度升序 li, lj := len(values[i]), len(values[j]) if li != lj { return li < lj } // 长度相同时第二优先级:按字典序升序 return values[i] < values[j] }) // 输出结果 fmt.Println(strings.Join(values, " ")) }
运行上述代码会直接输出你期望的结果:2 22 2H 2J 2M 2P 2W 2X 2J2 2J3 2J33 2J322422 2J322423
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

