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

如何按发布顺序排序格式为YY.MM[x]的版本号?

版本排序解决方案

要实现你需要的发布顺序排序(新版本在前),核心是把每个版本字符串拆解为年份、月份、后缀三个可排序字段,然后按「年份降序→月份降序→后缀字母降序」的规则排序。

具体实现思路

  1. 解析版本字符串:将YY.MM[x]格式的版本拆分为三个部分:
    • 年份:YY转为整数(如22)
    • 月份:MM转为整数(如12、9)
    • 后缀:x转为ASCII码(如a→97,b→98)
  2. 自定义排序规则:因为默认排序是升序,我们可以对每个字段取负数,让升序排序等价于原字段的降序排列,从而实现新版本优先的顺序。

Python代码示例

方法1:手动拆分字符串

versions = ["22.11a", "22.12a", "22.9a", "22.12b"]

def get_sort_key(version):
    # 拆分年份和后续部分
    year_str, rest = version.split('.')
    # 分离月份数字和后缀字母
    month_str = []
    suffix = []
    for char in rest:
        if char.isdigit():
            month_str.append(char)
        else:
            suffix.append(char)
    # 转换为排序用的负数值(实现降序)
    return (-int(year_str), -int(''.join(month_str)), -ord(suffix[0]))

sorted_versions = sorted(versions, key=get_sort_key)
print(sorted_versions)  # 输出: ['22.12b', '22.12a', '22.11a', '22.9a']

方法2:正则表达式解析(更简洁)

import re

versions = ["22.11a", "22.12a", "22.9a", "22.12b"]
# 匹配年份、月份、后缀的正则
version_regex = re.compile(r'^(\d+)\.(\d+)([a-z])$')

sorted_versions = sorted(
    versions,
    key=lambda v: (
        -int(version_regex.match(v).group(1)),  # 年份降序
        -int(version_regex.match(v).group(2)),  # 月份降序
        -ord(version_regex.match(v).group(3))   # 后缀字母降序
    )
)
print(sorted_versions)  # 输出: ['22.12b', '22.12a', '22.11a', '22.9a']

关键说明

  • 月份转为整数后排序,避免字符串排序的逻辑错误(比如字符串"9"会被判定为大于"12",转为整数后12>9才符合实际月份先后)。
  • 后缀字母通过ord()转为ASCII码,利用字母的ASCII值大小关系(b>a)实现同月份内的版本排序。

内容的提问来源于stack exchange,提问作者Welozbee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:50:25