如何对数字数组按小数部分整数规则排序,让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
相关产品推荐
相关产品推荐

