2016-11-16 8 views
5

У меня есть серия файлов с различными путями файлов и именами файлов, все имена файлов имеют одно и то же расширение, но имена или пути каталога различны, и они установили загрузку файлов в Tstringlist, и я пытаюсь сортировать их в порядке имен файлов, даже если у них есть пути.Delphi XE2 Сортировка Tstringlist по имени файла

Вот пример строки в TStringList: -

c:\directory 1\AboutUs.lnk 
c:\directory something\AAHelp.lnk 
c:\directory anything\AAATalk.lnk 

При сортировке по имени файла часть строки, я хотел бы закончить с.

c:\directory anything\AAATalk.lnk 
c:\directory something\AAHelp.lnk 
c:\directory 1\AboutUs.lnk 

Другими словами, я хотел бы иметь возможность сортировать строки с пути по имени файла часть строки.

Любая помощь будет оценена !.

ответ

6

Использование TStringList.CustomSort():

function Compare(List: TStringList; Index1, Index2: Integer): Integer; 
begin 
    Result := CompareStr(
    LowerCase(ExtractFileName(List[Index1])), 
    LowerCase(ExtractFileName(List[Index2])) 
); 
end; 

// Then, just call: 
YourStrList.CustomSort(Compare); 
+1

Этот подход будет работать, но это может иметь довольно низкую производительность. Зачем? Потому что в этом подходе вы вызываете 'ExtractFileName' дважды для каждого сравнения. Теперь сколько сравнений требуется в значительной степени зависит от того, какой алгоритм сортировки используется. Поэтому я бы рекомендовал подготовить данные (извлечение имен файлов), прежде чем выполнять сортировку. Это может значительно ускорить процесс, поскольку вам нужно будет вызывать 'ExtractFileName' только один раз для каждого элемента списка. – SilverWarior

+1

Или, возможно, даже лучший подход заключался бы в подготовке ваших данных, чтобы он хранился как пара строк, где одна строка представляет путь к файлу, а другая представляет имя файла. Это также позволит вам реализовать так называемую сортировку с несколькими параметрами, в которой вы первоначально должны сортировать свои данные на основе имен файлов, и когда у вас будет несколько файлов с тем же именем, вы будете сортировать их по их пути. – SilverWarior

+0

@SilverWarior, я понимаю вашу точку зрения на оптимизацию. Вы можете опубликовать ответ, реализующий свою идею, и я с удовольствием предлагаю изменить принятый ответ. – karliwson

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