在C#中自定义排序ListBox项

时间:2016-03-04 23:07:19

标签: c# c#-4.0

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

我知道必须有一种比我想象的更简单的方法(使用 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。

谢谢

2 个答案:

答案 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之类的数字。