标签: natural-sort

Javascript:自然的字母数字字符串

我正在寻找一种最简单的方法来排序由数字和文本组成的数组,以及这些数组的组合.

例如

'123asd'
'19asd'
'12345asd'
'asd123'
'asd12'
Run Code Online (Sandbox Code Playgroud)

变成

'19asd'
'123asd'
'12345asd'
'asd12'
'asd123'
Run Code Online (Sandbox Code Playgroud)

这将与我在这里提出的另一个问题的解决方案结合使用.

排序函数本身就可以工作,我需要的是一个可以说'19asd'小于'123asd'的函数.

我是用JavaScript编写的.

编辑:正如adormitu指出的那样,我正在寻找的是一种自然分类的功能

javascript sorting natural-sort

140
推荐指数
6
解决办法
8万
查看次数

C#中的自然排序顺序

任何人都拥有良好的资源或在C#中为FileInfo数组提供自然顺序排序的样本?我正在实现IComparer我的各种界面.

c# sorting file natural-sort

124
推荐指数
11
解决办法
5万
查看次数

在MySQL中自然排序

有没有一种优雅的方法在MySQL数据库中进行高性能的自然排序?

例如,如果我有这个数据集:

  • 最终幻想
  • 最终幻想4
  • 最终幻想10
  • 最终幻想12
  • 最终幻想12:Promathia的链条
  • 最终幻想冒险
  • 最终幻想起源
  • 最终幻想战术

任何其他优雅的解决方案,而不是将游戏的名称分解为他们的组件

  • 标题:"最终幻想"
  • 数量:"12"
  • 副标题:"Promathia链"

确保它们以正确的顺序出现?(4后4,而不是2).

这样做是一个痛苦的**,因为时不时有另一个游戏打破了解析游戏标题的机制(例如"Warhammer 40,000","James Bond 007")

mysql sql sorting natural-sort

75
推荐指数
10
解决办法
7万
查看次数

Java中的自然排序顺序字符串比较 - 是内置的吗?

我想要一些保留自然排序顺序1的字符串比较函数.Java中是否有这样的内容?我在String类中找不到任何内容,而Comparator类只知道两个实现.

我可以自己动手(这不是一个非常难的问题),但如果我不需要,我宁愿不重新发明轮子.

在我的具体情况下,我有我想要排序的软件版本字符串.所以我希望"1.2.10.5"被认为大于"1.2.9.1".


1通过"自然"排序顺序,我的意思是它将字符串与人类比较它们的方式进行比较,而不是"ascii-betical"排序顺序只对程序员有意义.换句话说,"image9.jpg"小于"image10.jpg","album1set2page9photo1.jpg"小于"album1set2page10photo5.jpg","1.2.9.1"小于"1.2.10.5"

java algorithm natural-sort comparator

69
推荐指数
4
解决办法
7万
查看次数

Microsoft SQL 2005中的自然(人类字母数字)排序

我们有一个大型数据库,我们有数据库端分页.这很快,在几分之一秒内从数百万条记录中返回50行的页面.

用户可以定义自己的排序,基本上选择要排序的列.列是动态的 - 一些具有数值,一些日期和一些文本.

虽然大多数按预期文本排序是愚蠢的.嗯,我说愚蠢,它对计算机有意义,但让用户感到沮丧.

例如,按字符串记录ID排序会产生如下内容:

rec1
rec10
rec14
rec2
rec20
rec3
rec4
Run Code Online (Sandbox Code Playgroud)

...等等.

我希望这个考虑到这个数字,所以:

rec1
rec2
rec3
rec4
rec10
rec14
rec20
Run Code Online (Sandbox Code Playgroud)

我无法控制输入(否则我只是在前导000中格式化)而且我不能依赖单一格式 - 有些类似于"{alpha code} - {dept code} - {rec id}".

我知道在C#中有几种方法可以做到这一点,但是不能拉下所有记录来对它们进行排序,因为这样会慢.

有谁知道在Sql server中快速应用自然排序的方法?


我们正在使用:

ROW_NUMBER() over (order by {field name} asc)
Run Code Online (Sandbox Code Playgroud)

然后我们就这样分页.

我们可以添加触发器,但我们不会.他们所有的输入都是参数化的,但是我无法改变格式 - 如果他们输入"rec2"和"rec10",他们希望它们就像那样,以自然的顺序返回.


我们有有效的用户输入,遵循不同客户的不同格式.

有人可能会去rec1,rec2,rec3,... rec100,rec101

而另一个可能会去:grp1rec1,grp1rec2,... grp20rec300,grp20rec301

当我说我们无法控制输入时,我的意思是我们不能强迫用户更改这些标准 - 它们有一个像grp1rec1的值,我不能将其重新格式化为grp01rec001,因为这会改变用于查找的内容和链接到外部系统.

这些格式变化很大,但通常是字母和数字的混合.

在C#中对它们进行排序很容易 - 只需将其分解{ "grp", 20, "rec", 301 },然后依次比较序列值.

但是,可能有数百万条记录并且数据被分页,我需要在SQL服务器上进行排序.

SQL服务器按值排序,而不是比较 - 在​​C#中我可以将值拆分为比较,但在SQL中我需要一些逻辑(非常快)获得一致排序的单个值.

@moebius - 你的答案可能会有效,但是为所有这些文本值添加排序键确实感觉像是一个丑陋的妥协.

sql-server sorting sql-server-2005 natural-sort

44
推荐指数
6
解决办法
3万
查看次数

混合的字数和字符串的人性化或自然数字排序

关注Sivaram Chintalapudi 提出这个问题,我很感兴趣的是PostgreSQL中是否可以进行自然 - 或"人性化" - 对包含多位数字和单词/字母混合的字符串进行排序.没有固定的字符串中的单词和数字的模式,并且字符串中可能有多个多位数字.

我经常看到这个常见的地方是在Mac OS的Finder中,它自然地对包含混合数字和单词的文件名进行排序,在"3"之后放置"20",而不是在它之前.

所需的校对顺序将由算法产生,该算法将每个字符串拆分为字母数字边界的块,然后对每个部分进行排序,处理具有正常整理的字母块和用于整理目的的数字块作为整数.所以:

'AAA2fred'将成为('AAA',2,'fred')'AAA10bob'将成为('AAA',10,'bob').然后可以根据需要对它们进行排序:

regress=# WITH dat AS ( VALUES ('AAA',2,'fred'), ('AAA',10,'bob') )
regress-# SELECT dat FROM dat ORDER BY dat;
     dat      
--------------
 (AAA,2,fred)
 (AAA,10,bob)
(2 rows)
Run Code Online (Sandbox Code Playgroud)

与通常的字符串排序规则相比:

regress=# WITH dat AS ( VALUES ('AAA2fred'), ('AAA10bob') )
regress-# SELECT dat FROM dat ORDER BY dat;
    dat     
------------
 (AAA10bob)
 (AAA2fred)
(2 rows)
Run Code Online (Sandbox Code Playgroud)

但是,记录比较方法没有概括,因为Pg不会比较ROW(..)构造或不等数量条目的记录.

给定此SQLFiddle中的示例数据,默认的en_AU.UTF …

sql sorting postgresql collation natural-sort

29
推荐指数
4
解决办法
8248
查看次数

如何按降序/按顺序执行"uniq -c"的自然排序输出? - unix

如何对uniq -c输出进行自然排序?

当计数<10时,uniq -c | sort输出看起来很好:

alvas@ubi:~/testdir$ echo -e "aaa\nbbb\naa\ncd\nada\naaa\nbbb\naa\nccd\naa" > test.txt
alvas@ubi:~/testdir$ cat test.txt
aaa
bbb
aa
cd
ada
aaa
bbb
aa
ccd
aa
alvas@ubi:~/testdir$ cat test.txt | sort | uniq -c | sort
      1 ada
      1 ccd
      1 cd
      2 aaa
      2 bbb
      3 aa
Run Code Online (Sandbox Code Playgroud)

但是当计数大于10甚至数千/数时,这种排序会混乱,因为它是按字符串排序而不是按自然整数排序:

alvas@ubi:~/testdir$ echo -e "aaa\nbbb\naa\nnaa\nnaa\naa\nnaa\nnaa\nnaa\nnaa\nnaa\nnaa\nnaa\nnaa\nnnaa\ncd\nada\naaa\nbbb\naa\nccd\naa" > test.txt
alvas@ubi:~/testdir$ cat test.txt | sort | uniq -c | sort
     10 naa
      1 ada
      1 ccd
      1 cd
      1 nnaa
      2 aaa …
Run Code Online (Sandbox Code Playgroud)

unix sorting count natural-sort uniq

27
推荐指数
1
解决办法
2万
查看次数

使用PostgreSQL进行字母数字排序

在数据库中,我有以下格式的各种字母数字字符串:

10_asdaasda
100_inkskabsjd
11_kancaascjas
45_aksndsialcn
22_dsdaskjca
100_skdnascbka
Run Code Online (Sandbox Code Playgroud)

我希望它们基本上按字符串前面的数字排序,然后按字符串名称本身排序,但当然,字符会逐个进行比较,因此Order by name的结果会产生:

10_asdaasda
100_inkskabsjd
100_skdnascbka
11_kancaascjas
22_dsdaskjca
45_aksndsialcn
Run Code Online (Sandbox Code Playgroud)

而不是我更喜欢的顺序:

10_asdaasda
11_kancaascjas
22_dsdaskjca
45_aksndsialcn
100_inkskabsjd
100_skdnascbka
Run Code Online (Sandbox Code Playgroud)

老实说,如果字符串只按前面的数字排序,我会没事的.我对PostgreSQL不太熟悉,所以我不确定最好的方法是什么.我很感激任何帮助!

sql sorting postgresql natural-sort sql-order-by

24
推荐指数
2
解决办法
2万
查看次数

使用Qt自然地对文件名进行排序

我正在阅读目录内容使用QDir::entryList().其中的文件名结构如下:

index_randomNumber.png
Run Code Online (Sandbox Code Playgroud)

我需要按照indexWindows资源管理器对文件进行排序的方式排序,以便我得到

0_0815.png
1_4711.png
2_2063.png
...
Run Code Online (Sandbox Code Playgroud)

而不是排序通过QDir::Name给我:

0_0815.png
10000_6661.png
10001_7401.png
...
Run Code Online (Sandbox Code Playgroud)

在Qt中是否有内置的方法来实现这一点,如果没有,那么实现它的正确位置是什么?

c++ qt natural-sort

24
推荐指数
2
解决办法
1万
查看次数

自然排序算法

如何在不同的编程语言中自然地对字符串数组进行排序?发布您的实现以及答案中的语言.

language-agnostic sorting algorithm natural-sort

23
推荐指数
4
解决办法
8695
查看次数