美文网首页
文件名排序算法分析

文件名排序算法分析

作者: reezon | 来源:发表于2018-05-11 18:07 被阅读15次

要解决的问题

用户在上传海量图片的时候,我们希望提供能够根据图片文件名进行正序/逆序排序的功能。

但是,传统的localeCompare方法,在面对包含数字和字符的字符串数组的排序时,会遇到如下问题:

var source = ['0509_1.jpg', '0509_2.jpg', '0509_11.jpg']

经过localeCompare()排序后,会变成

var result = ['0509_1.jpg', '0509_11.jpg', '0509_2.jpg']

显然这不是我们想要的结果

natsort库分析

幸运地,我们在github上找到一个成熟的排序库natsort

该算法中,最重要的就在于正则表达式的构建,才能准确地将数字从字符串中识别并分离出来。

下面我们分析一下它的源码,一起学习一下如何正确地比较两个字符串的大小。

Step1: 去掉空格

var tre = /^\s+|\s+$/g

function replaceWhiteSpace (s) {
  return ('' + s).replace(tre, '');
}

Step2: 将包含的数字部分进行拆分

var nre = /(0x[\da-fA-F]+|(^[\+\-]?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?(?=\D|\s|$))|\d+)/g

function splitString (s) {
  return s.replace(nre, '\0$1\0')
          .replace(/\0$/, '')
          .replace(/^\0/, '')
          .split('\0')
}

Step3: 判断是否为Hex或者日期

var hre = /^0x[0-9a-f]+$/i

function parseHex (s) {
  return parseInt(s.match(hre), 16) || null
}

var dre = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/

function parseDatetime (s) {
  return s.match(dre) && Date.parse(s) || null
}

Step4: 对已拆分的两个数组进行比较

代码就不贴出来了,大概的思路就是:

  1. 遍历两个数组,对其中的数字转换为字符串;
  2. 对转换出来的字符串使用localeCompare进行比较;

用法

参见natsort

相关文章

  • 文件名排序算法分析

    要解决的问题 用户在上传海量图片的时候,我们希望提供能够根据图片文件名进行正序/逆序排序的功能。 但是,传统的lo...

  • 数据结构与算法第七讲 - 排序(上)

    对于排序算法,主要掌握内容如下: 排序算法的实现原理 手写出实现代码 评价及分析算法 本讲内容 如何分析一个排序算...

  • 2020-04-30-排序算法

    冒泡排序 直接选择排序 插入排序 快速排序 参考 算法学习笔记17-经典排序算法八大排序算法稳定性分析

  • 6基础算法之冒泡,插入,选择排序

    如何分析一个“排序算法”? 排序算法的执行效率 对于排序算法执行效率的分析,我们一般会从这几个方面来衡量: 最好情...

  • 第4章 结构体

    1、排序 算法分析 用结构体存储,并进行排序 时间复杂度 Java 代码 2、成绩排序 算法分析 先对分数从小到大...

  • 基础算法(查找 , 排序)

    算法分析 渐进符号 - (O , Ω , θ) 查找算法 二分查找 - O(logn) 排序算法 直接插入排序 -...

  • 【算法】排序(一)选择排序

    在排序算法中,最简单的莫过于选择排序了。 本文将介绍以下内容 排序思路算法实现(JAVA)测试阶段算法分析 排序思...

  • 算法:冒泡排序

    本文内容:1、什么是冒泡排序?2、冒泡排序的 C/OC 实现与算法分析。 算法总目录:算法? 1、什么是冒泡排序?...

  • 数据结构与算法--排序

    常用的排序算法 如何分析一个“排序算法”? 排序算法的执行效率 最好情况、最坏情况、平均情况时间复杂度 时间复杂度...

  • 数据时代,只有算法能洞悉数据的内在逻辑,让数据产生商业价值!

    本书介绍在互联网行业中经常涉及的算法,包括排序算法、查找算法、资源分配算法、路径分析算法、相似度分析算法,...

网友评论

      本文标题:文件名排序算法分析

      本文链接:https://www.haomeiwen.com/subject/yycqdftx.html