我有一些自定义文件名,我需要根据文件名本身的信息进行排序。
我知道必须有一种比我想象的更简单的方法(使用 SortDescriptions 进行并手动拆分字符串以识别各种文件名信息的for循环)但我可以'弄明白了。
文件名格式为:
OurApp_versionNum_DEBUG_build_number.exe
e.g。
Notepad_1.0_DEBUG_build_1.exe
我想对列表框顶部最高版本号的项目进行排序,例如。
Notepad_1.0_DEBUG_build_ 10 .exe
Notepad_1.0_DEBUG_build_的 7 .EXE
Notepad_1.0_DEBUG_build_的 1 .EXE
我知道必须有一种比我想出的更简单的方法。任何帮助表示赞赏。
我使用的是.NET 4.0。
谢谢
米
答案 0 :(得分:0)
我认为您正在寻找一种定制的自然排序算法。有关示例实现,请参阅this discussion(作者J.D.)的本地C#
实现。
wikipedia:的定义
自然排序顺序是按字母顺序排列的字符串,但多位数字排序为单个字符
未修改,它会将您的列表输出为:
- Notepad_1.0_DEBUG_build_1.exe
- Notepad_1.0_DEBUG_build_7.exe
- Notepad_1.0_DEBUG_build_10.exe
如果所有条目都具有相同的前缀,则可以使用反向比较函数:
public static int CompareNaturalReverse(string strA, string strB) {
return -CompareNatural(strA, strB);
}
否则,如果你想维持字母顺序并且只反转数字顺序(因为前缀不同),你必须改变排序实现。
答案 1 :(得分:-1)
在将项目添加到列表框之前对项目进行排序。如果您知道文件名的确切位置,那么简单的正则表达式调用可以提取诸如(\\d+).exe
之类的数字。