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

如何对数字数组按小数部分整数规则排序,让9.10排在9.9之后

类版本号自定义排序实现方案

核心逻辑

你需要的排序本质是语义化版本号规则排序,不能直接使用默认的数值/字符串排序逻辑,需要将每个元素按.分割为主、次版本段,先比较主版本的整数值,主版本相同时再比较次版本的整数值,即可得到预期结果。

注意事项

注意:如果用数字类型存储带两位及以上次版本的标识,9.10会被部分语言自动识别为浮点数9.1,丢失次版本的10,生产环境建议将这类版本标识统一存为字符串格式,避免精度丢失。

常见语言实现示例

JavaScript 实现

const arr = [9, 9.10, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9];
const sortedArr = arr.sort((a, b) => {
  // 将元素转字符串后分割为版本段,每段转成整数
  const partsA = String(a).split('.').map(Number);
  const partsB = String(b).split('.').map(Number);
  // 补全版本段长度,适配只有主版本的整数场景
  const maxLen = Math.max(partsA.length, partsB.length);
  for (let i = 0; i < maxLen; i++) {
    const numA = partsA[i] || 0;
    const numB = partsB[i] || 0;
    if (numA !== numB) {
      return numA - numB;
    }
  }
  return 0;
});
// 输出结果:[9, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9, 9.10]

Python 实现

Python默认支持元组按位比较,直接将分割后的版本段转成整数元组作为排序key即可:

arr = [9, 9.10, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9]
sorted_arr = sorted(arr, key=lambda x: tuple(map(int, str(x).split('.'))))
# 输出结果:[9, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9, 9.10]

扩展说明

该逻辑天然支持多位版本号场景(如1.1.2、2.10.3),不需要修改代码即可直接复用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:48:03