2016-03-04 2 views
0

У меня есть некоторые пользовательские имена файлов, которые мне нужно сортировать на основе информации в самом имени файла.Пользовательские сортировки Элементы ListBox в C#

Я знаю, что должно быть более простым способом, чем я придумал (а цикл, который проходит через и вручную расщепляет строки для идентификации различных имен файлов информации) с помощью SortDescriptions, но я не могу понять их ,

Формат файла является:

OurApp_versionNum_DEBUG_build_number.exe

например,

Notepad_1.0_DEBUG_build_1.exe

Я хочу, чтобы отсортировать элементы с наибольшим номером сборки в верхней части списка, так, например,

Notepad_1.0_DEBUG_build_ .exe

Notepad_1.0_DEBUG_build_ .exe

Notepad_1.0_DEBUG_build_ .exe

Я знаю, что должен быть более простой способ, чем Я придумал. Любая помощь приветствуется.

Я использую .NET 4.0.

Спасибо

м

ответ

-1

Сортировать детали перед добавлением их в список. Простой вызов регулярного выражения мог бы извлечь число, например: (\\d+).exe, если вы знаете, что именно так будут имена файлов.

+0

В итоге я сделал что-то подобное. Прямо вперед для моих целей. – Maximojo

0

Я думаю, что вы ищете индивидуальный алгоритм естественной сортировки. См. this discussion для примера реализации (родной C# один, автор J.D.).

Определение от wikipedia:

Естественный порядок сортировки упорядочение строк в алфавитном порядке, за исключением того, что многоразрядных чисел упорядочены в виде одного символа

Unmodified, он будет выводить список как:

  • Notepad_1.0_DEBUG_build_1.exe
  • Notepad_1.0_DEBUG_build_7.exe
  • Notepad_1.0_DEBUG_build_10.ехе

Если все записи имеют одинаковый префикс, вы можете использовать только использовать обратную функцию сравнения:

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

В противном случае, если вы хотите сохранить алфавитный порядок и onlye обратного числовой (из-за разных префиксов), вы должны изменить реализацию сортировки.

Смежные вопросы