Сортировка строк по возрастанию
Есть строки в Memo1.Text такого вида:
способ - 8 повторов
протащить - 2 повторов
год - 14 повторов
принять - 3 повторов
и - 15 повторов
Как отсортировать строки по первым словам, по длине слова - от большего к меньшему, то есть чтобы на выходе получить результат:
протащить - 2 повторов
принять - 3 повторов
способ - 8 повторов
год - 14 повторов
и - 15 повторов
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
У TStringList (увы, не у TStrings) есть метод CustomSort. В него передаётся функция сравнения.
А внутри этой функции нужно выделить первые слова строк и сравнить их длину. В идеальном случае достаточно будет просто найти Pos пробела:
function SortCompare(AList: TStringList; Index1, Index2: integer): integer;
begin
Result := Pos(' ', AList[Index2]) - Pos(' ', AList[Index1]);
end;
procedure TForm1.Button43Click(Sender: TObject);
var
sl: TStringList;
begin
sl := TStringList.Create;
try
sl.Assign(Memo1.Lines);
sl.CustomSort(SortCompare);
Memo1.Lines.Assign(sl);
finally
sl.Free;
end;
end;