2012-06-30 3 views
2

У меня есть огромный список пользователей, и каждый пользователь имеет свой идентификатор, но идентификационные номера перепутались так что если кто-нибудь может показать мне, как я могу сортировать пользователей по номерам, каждое значение имеет такой видКак отсортировать список по первому номеру?

1:Stackoverflow 
or 
145000:Google 

Если Я это вручную, я думаю, что я сойду с ума, так как tehere более 700000 records.Thanks за ваше время и помочь ....

+0

см http://stackoverflow.com/questions/5134712/how-to-get-the-sort-order-in-delphi-as-in-windows-explorer – kludg

ответ

10

Extract номер так:

function ID(const str: string): Integer; 
var 
    p: Integer; 
begin 
    p := Pos(':', str); 
    if p=0 then 
    raise Exception.CreateFmt('Invalid string format: %s', [str]); 
    Result := StrToInt(Copy(str, 1, p-1)); 
end; 

После того, как вы можете извлечь идентификатор в виде целого числа, вы можете записать ompare. Как это:

function CompareIDs(List: TStringList; Index1, Index2: Integer): Integer; 
begin 
    Result := CompareValue(
    ID(List[Index1]), 
    ID(List[Index2]) 
); 
end; 

CompareValue является функцией RTL, которая возвращает -1, 0 или 1 в зависимости от относительных значений двух операндов.

Подайте эти строительные блоки в TStringList.CustomSort и ваша работа будет выполнена.

MyStringList.CustomSort(CompareIDs); 
+0

Результат = ValueCompare (ID1, ID2); – Marck

+0

@Marck Вы имеете в виду 'CompareValue', я думаю. Я согласен, что лучше использовать встроенные процедуры, и я не знал об этом. Я обновлю ответ. –

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