Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中的自定义排序列表框项#_C#_C# 4.0 - Fatal编程技术网

C# C语言中的自定义排序列表框项#

C# C语言中的自定义排序列表框项#,c#,c#-4.0,C#,C# 4.0,我有一些自定义文件名,需要根据文件名本身的信息进行排序 我知道必须有一种比我用SortDescriptions想出的更简单的方法(一个for循环,它通过并手动拆分字符串来识别各种文件名信息),但我无法理解它们 文件名格式为: OurApp\u versionNum\u DEBUG\u build\u number.exe e、 g 记事本\u 1.0\u调试\u构建\u 1.exe 我想对列表框顶部具有最高版本号的项目进行排序,例如 记事本\u 1.0\u调试\u构建\ustrong>10.ex

我有一些自定义文件名,需要根据文件名本身的信息进行排序

我知道必须有一种比我用SortDescriptions想出的更简单的方法(一个for循环,它通过并手动拆分字符串来识别各种文件名信息),但我无法理解它们

文件名格式为:

OurApp\u versionNum\u DEBUG\u build\u number.exe

e、 g

记事本\u 1.0\u调试\u构建\u 1.exe

我想对列表框顶部具有最高版本号的项目进行排序,例如

记事本\u 1.0\u调试\u构建\ustrong>10.exe

记事本1.0调试构建7.exe

记事本\u 1.0\u调试\u构建\ustrong>1.exe

我知道一定有比我想到的更简单的方法。感谢您的帮助

我正在使用.NET4.0

多谢各位


在将项目添加到列表框之前,对项目进行排序。一个简单的正则表达式调用可以提取数字,例如:
(\\d+).exe
,如果您知道文件名就是这样的话。

我想您正在寻找一种定制的自然排序算法。有关示例实现,请参见(本机
C#
one,作者J.D.)

定义自

自然排序顺序是按字母顺序对字符串排序,但多位数数字是按单个字符排序的

未经修改,它会将您的列表输出为:

  • 记事本\u 1.0\u调试\u构建\u 1.exe
  • 记事本\u 1.0\u调试\u构建\u 7.exe
  • 记事本\u 1.0\u调试\u构建\u 10.exe
如果所有条目都具有相同的前缀,则可以使用反向比较功能:

public static int CompareNaturalReverse(string strA, string strB) {
    return -CompareNatural(strA, strB);
}

否则,如果您想保持字母顺序,只想颠倒数字顺序(因为前缀不同),就必须更改排序实现。

我最后做了类似的事情。为了我的目的,请直截了当。