Форум: "Начинающим";
Текущий архив: 2014.05.04;
Скачать: [xml.tar.bz2];
ВнизКак правильнее? Найти похожие ветки
← →
delphistorm (2013-07-24 12:19) [0]Какой из вариантов правильнее?
var
I: Integer;
Links: TStringList;
S: string;
begin
Links := TStringList.Create;
// ...
for I := 0 to Links.Count - 1 do
S := S + Links[I] + ",";
Delete(S, Length(S), 1);
// ...
Links.Free;
end;
var
I: Integer;
Links: TStringList;
S: string;
begin
Links := TStringList.Create;
// ...
for I := 0 to Links.Count - 1 do
begin
S := S + Links[I];
if I <> Links.Count - 1 then
S := S + ",";
end;
// ...
Links.Free;
end;
← →
DVM © (2013-07-24 12:36) [1]все равно, второй может чуть лучше
← →
DVM © (2013-07-24 12:39) [2]Лучше TStringBuilder использовать для таких вещей если много элементов в Links
← →
Inovet © (2013-07-24 12:51) [3]Или так
if Links.Count > 0 then
begin
S := Links[0];
for I := 1 to Links.Count - 1 do
begin
S := S + "," + Links[I];
end;
end;
← →
RWolf © (2013-07-24 12:53) [4]
S := Links.CommaText;
← →
Inovet © (2013-07-24 12:57) [5]Или так
Links.Delimiter := ","; // Это даже не обязательно
S := Links.DelimitedText;
← →
Inovet © (2013-07-24 12:58) [6]> [4] RWolf © (24.07.13 12:53)
> S := Links.CommaText;
Вот, точно - есть же сразу с комами.
← →
DVM © (2013-07-24 13:05) [7]
> S := Links.CommaText;
а каждое значение в кавычки не обернется при этом?
← →
RWolf © (2013-07-24 13:11) [8]
> [7]
только те, что содержат запятые.
← →
Ega23 © (2013-07-24 13:19) [9]
for i := 0 to Links.Count - 2 do
Links[i] := Links[i] + ",";
Result := Links.Text;
Может и не оптимально, зато наглядно.
← →
Inovet © (2013-07-24 13:25) [10]> [9] Ega23 © (24.07.13 13:19)
Так эта... В Text же концы строк будут, вроде.
← →
Ega23 © (2013-07-24 14:10) [11]
> Так эта... В Text же концы строк будут, вроде.
А. Ну тогдаif Links.Count = 0 then
Exit("");
Result := Links[0];
for i := 1 to Links.Count - 1 do
Result := Result + "," + Links[i];
← →
Sha © (2013-07-24 15:29) [12]> Как правильнее?
сначала установить нужную длину результирующей строки,
а потом пихать туда данные
← →
Inovet © (2013-07-24 16:45) [13]> [12] Sha © (24.07.13 15:29)
Типа
SetLength(Rezult, Links.Text.Length - Links.Count);
?
Это, если концы сток по 2 символа.
← →
Sha © (2013-07-24 17:00) [14]> Inovet © (24.07.13 16:45) [13]
Я имел в ввиду другое.
Если список длины 1, то результат равен единственной строке списка.
Иначе в первом цикле пройтись по списку и вычислить суммарную длину с учетом разделителей.
Затем во втором цикле переслать данные и разделители в результат с нужным смещением.
← →
DVM © (2013-07-24 18:03) [15]
> Inovet © (24.07.13 16:45) [13]
> SetLength(Rezult, Links.Text.Length - Links.Count);
Нельзя обращаться к Links.Text, это обращение сведет на нет выгоду от предварительной установки длины строки. Надо просто пройтись по первому списку и просуммировать длины всех его элементов, потом прибавить к ним длину разделителей и полученное значение использовать для выделения памяти под результат. Потом перебирая еще раз элементы, будем писать данные в результат с нужным смещением, смещение будем с каждым элементом списка увеличивать на длину элемента списка плюс разделитель.
← →
Inovet © (2013-07-24 18:13) [16]> [15] DVM © (24.07.13 18:03)
> это обращение сведет на нет выгоду от предварительной установки длины строки
Вот поэтому и спросил.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2014.05.04;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.002 c