Форум: "Основная";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
ВнизCustomSort в TStringList Найти похожие ветки
← →
GanibalLector © (2005-06-30 23:26) [0]TStringList имеет метод CustomSort,состоящий из TStringListSortCompare = function(List: TStringList; Index1, Index2: Integer): Integer;
До недавнего времени я так и делал :
function NumbersSort(List: TStringList; Index1, Index2: Integer): Integer;
begin
Result := -1;
if StrToInt(List.Strings[Index1])>StrToInt(List.Strings[Index2])
then Result := 1
else
if StrToInt(List.Strings[Index1]) = StrToInt(List.Strings[Index2])
then Result := 0;
end;
function DoSort(OList:TObjectList):TObjectList;
var i,ii:Integer;
List:TStringList;
Ob:TObject;
begin
TStringList(OList.Items[0]).CustomSort(NumbersSort);
Result:=TObjectList.Create;
Result.Add(Olist.Items[0]);
for i:= 1 to OList.Count-1 do
begin
List:=TStringList.Create;
for ii:=0 to TStringList(OList.Items[0]).Count-1 do
begin
Ob:=TStringList(Result.Items[0]).Objects[ii];
List.Add(TStringList(OList.Items[i])[TStringList(OList.Items[i]).IndexOfObject(Ob)]);
end;
Result.Add(List);
OList.Items[i].Free;
end;
end;
Вызывал так :
Q:=TObjectList.Create;
...// много чего
Q:=DoSort(Q);
Так вот,время идет,задачи усложняются ;) теперь мне необходимо сортировать не Integer а Int64.
И ШО собственно делать??? Писать наследника от TStringList с новым методом TStringListSortCompare = function(List: TStringList; Index1, Index2: Int64): Integer;
В общем,как бы это сделать без лишнего головняка? Спасибо.
← →
VMcL © (2005-07-01 00:07) [1]StrToInt заменить на StrToInt64
?
← →
GanibalLector © (2005-07-01 00:38) [2]2 VMcL © (01.07.05 00:07) [1]
а толку? EConvertError with message "8000125484" is not a valid integer value.
Вот,примерчик Лукавый :
procedure TForm1.Button1Click(Sender: TObject);
var Q:TObjectList;
List:TStringList;
begin
Q:=TObjectList.Create;
List:=TStringList.Create;
List.AddObject("8000125484",TObject(1)) ;
List.AddObject("80030", TObject(2)) ;
List.AddObject("55003", TObject(3)) ;
Q.Add(List);
//
List:=TStringList.Create;
List.AddObject("q",TObject(1)) ;
List.AddObject("w", TObject(2)) ;
List.AddObject("e", TObject(3)) ;
Q.Add(List);
Q:=DoSort(Q);
StringGrid1.Cols[1]:=TStrings(Q.Items[0]);
StringGrid1.Cols[2]:=TStrings(Q.Items[1]);
end;
← →
GanibalLector © (2005-07-01 00:44) [3]блин,тот пример работает ;)
А вот так:List.AddObject("9999999999",TObject(1)) ;
уже не работает. Я вышел за границы Int64,блин :(
← →
GanibalLector © (2005-07-01 00:49) [4]2 GanibalLector © (01.07.05 00:44) [3]
>вышел за границы Int64,блин :(
Да нет,не вышел.А ШО ж такое???var x:Int64;
begin
x := High(Int64);
ShowMessage("Max = "+IntToStr(x));
← →
GanibalLector © (2005-07-01 00:53) [5]Блин,сегодня я тупой :(
Все получилось. Во,гоню!!!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.042 c