You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:39:00