相关疑难解决方法(0)

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万
查看次数

使用LINQ进行字母数字排序

我有一个string[],其中每个元素都以一些数字值结尾.

string[] partNumbers = new string[] 
{ 
    "ABC10", "ABC1","ABC2", "ABC11","ABC10", "AB1", "AB2", "Ab11" 
};
Run Code Online (Sandbox Code Playgroud)

我试图按如下方式对上面的数组进行排序,LINQ但我没有得到预期的结果.

var result = partNumbers.OrderBy(x => x);
Run Code Online (Sandbox Code Playgroud)

实际结果:

AB1
Ab11
AB2
ABC1
ABC10
ABC10
ABC11
ABC2

预期结果

AB1
AB2
AB11
..

c# linq sorting

35
推荐指数
4
解决办法
3万
查看次数

Windows资源管理器排序方法

我正在寻找一种算法来排序字符串,类似于在Windows资源管理器中排序文件(和文件夹)的方式.似乎在排序时会考虑字符串中的数值,这会产生类似的结果

name 1, name 2, name 10
Run Code Online (Sandbox Code Playgroud)

代替

name 1, name 10, name 2
Run Code Online (Sandbox Code Playgroud)

通过常规字符串比较得到的.

我本人即将开始写这篇文章,但是想要检查一下是否有人这样做过,并愿意分享一些代码或见解.我接近这个的方法是在比较之前将前导零添加到名称中的数值.这会产生类似的结果

name 00001, name 00010, name 00002
Run Code Online (Sandbox Code Playgroud)

当使用常规字符串排序进行排序时,会给出正确的结果.

有任何想法吗?

sorting algorithm

19
推荐指数
2
解决办法
7353
查看次数

以用户友好的方式对包含数字的字符串进行排序

习惯于对字符串进行排序的标准方法,当我注意到Windows以某种高级方式按名称对文件进行排序时,我感到很惊讶.让我给你举个例子:

Track1.mp3
Track2.mp3
Track10.mp3
Track20.mp3

我认为这些名称是根据字母和数字分别比较(在排序期间).

另一方面,以下是以标准方式排序的相同列表:
Track1.mp3
Track10.mp3
Track2.mp3
Track20.mp3

我想在Delphi中创建一个比较算法,让我以相同的方式对字符串进行排序.起初我认为比较两个字符串的连续字符就足够了.当在两个字符串的某个位置找到一个数字时,我会读取它们后面的所有数字以形成一个数字,然后比较这些数字.

举个例子,我将用这种方式比较"Track10"和"Track2"字符串:
1)读取字符时它们是相等的,而它们是字母:"Track","Track"
2)如果找到一个数字,读取以下所有数字:"10","2"
2a)如果它们相等,则转到1或者完成
Ten大于2,因此"Track10"大于"Track2"

似乎一切都会好的,直到我在测试期间发现Windows认为"Track010"低于"Track10",而我认为第一个更长,因为它更长(没有提到根据我的算法字符串将是相等的,这是错误的).

你能否告诉我Windows如何按名称对文件进行排序,或者你有一个我可以使用的即用型算法(使用任何编程语言)?

非常感谢!
马里乌什

sorting algorithm text numbers

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

按数字排序字符串列表(1,2,...,9,10而不是1,10,2)

我有一个像这样的列表:

var l = new List<string> {"bla 1.txt","bla 2.txt","bla 10.txt","bla 3.txt"};
Run Code Online (Sandbox Code Playgroud)

如果我调用l.Sort(),列表将以1,10,2,3的顺序排序,这从纯字符串的角度来看是有意义的,但是从用户角度来看很糟糕.

因为我不想/不能强迫我的用户将它们命名为01,02,03,...我想知道是否有内置方法或简单算法来正确检测和排序数字,以便我有1,2,3,10?由于数字只有1或2个字符长(即不超过99),我可以做一个正则表达式,暂时为所有1位数字加前缀0和排序,但在重新发明轮子之前,我想知道是否已存在某些内容?

.net 3.5SP1如果重要,不是4.0

.net c# sorting numbers

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

LINQ和自然排序顺序

获取LINQ查询(从SQL数据库 - 这有关系吗?)的最简单方法是自然地对字符串进行排序?

例如,我目前正在获得这些结果:

  • 项目1
  • 项目10
  • 项目2

我想要看的是:

  • 项目1
  • 项目2
  • 项目10

我正在使用的查询是这样的:

return from p in dataContext.Projects
    orderby p.Name
    select p;
Run Code Online (Sandbox Code Playgroud)

c# linq natural-sort

12
推荐指数
1
解决办法
9420
查看次数

如何将数字字符串整理为数字?

如果你有像这样的字符串:

"file_0"
"file_1"
"file_2"
"file_3"
"file_4"
"file_5"
"file_6"
"file_11"
Run Code Online (Sandbox Code Playgroud)

如何对它们进行排序,使"file_11"不会出现在"file_1"之后,而是出现在"file_6"之后,因为11> 6.

我是否必须解析字符串并将其转换为数字?

Win7中的Windows资源管理器按我想要的方式对文件进行排序.

.net c# string comparison

11
推荐指数
4
解决办法
8300
查看次数

如何使用C#以数字方式对值进行排序?

我有一个字符串,其中包含以句点分隔的数字.当我排序时它看起来像这样,因为它是一个字符串:(ascii char order)

3.9.5.2.1.1
3.9.5.2.1.10
3.9.5.2.1.11
3.9.5.2.1.12
3.9.5.2.1.2
3.9.5.2.1.3
3.9.5.2.1.4
Run Code Online (Sandbox Code Playgroud)

等等

我希望它像这样排序:(按数字顺序)

3.9.5.2.1.1
3.9.5.2.1.2
3.9.5.2.1.3
...
3.9.5.2.1.9
3.9.5.2.1.10
3.9.5.2.1.11
3.9.5.2.1.12
Run Code Online (Sandbox Code Playgroud)

我知道我可以:

  1. 使用"分割"功能可获取各个数字
  2. 将值放入对象中
  3. 对对象排序

如果重复现有功能,我宁愿避免所有这些工作..net框架中的方法是否已经执行此操作?

.net c# sorting string numbers

10
推荐指数
1
解决办法
3808
查看次数

排序字符串数字

可能重复:
C#中的自然排序顺序

我有一个包含大量数字的列表.但是由于一些额外的字母,它们被保存为字符串.

我的列表看起来像这样:

1
10
11
11a
11b
12
2
20
21a
21c
A1
A2
...
Run Code Online (Sandbox Code Playgroud)

但它应该是这样的

1
2
10
11a
11b
...
A1
A2
...
Run Code Online (Sandbox Code Playgroud)

如何对列表进行排序以获得此结果?

c# sorting string list

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

用于自然分类的IComparer

我一直在寻找解决方案一段时间了.

当我使用字符串排序对下面排序时,我有一个列表:

10
10b
1111
1164
1174
23
23A
23B
23D
23E
Run Code Online (Sandbox Code Playgroud)

我真的希望列表是:

10
10b
23
23A
23B
23D
23E
1111
1164
1174
Run Code Online (Sandbox Code Playgroud)

数字排序也不能完成这项工作.

c# sorting list natural-sort

8
推荐指数
1
解决办法
5860
查看次数

标签 统计

sorting ×8

c# ×7

.net ×3

natural-sort ×3

numbers ×3

string ×3

algorithm ×2

linq ×2

list ×2

comparison ×1

javascript ×1

text ×1