Форум: "Основная";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];
ВнизДинамические массивы Найти похожие ветки
← →
Reticent (2002-05-15 13:32) [0]Доброе время суток!
Вопрос, наверное, детский.
У меня есть
temp_list:array of TStringList;
теперь надо его заполнять. Кол-во элементов не известно.
Подскажите как мне создавать и добавлять в него эл-ты.
Я пробовал так
SetLength(temp_list,1);
i:=0;
...
while ... do
begin
temp_list[i]:= TStringList.Create;
temp_liste[i].Add(...);
i:=i+1;
end;
но это только если кол-во эл-ов известно. (например 1 :))
Всего хорошего!
← →
Виктор Щербаков (2002-05-15 13:35) [1]Узнать количество элементов в дин. массиве можно при помощи функции Length, а индексы первого и последнего элементов с помощью Low и High.
← →
Просто гость (2002-05-15 13:36) [2]Используй TList
← →
Reticent (2002-05-15 13:40) [3]как узнать кол-во эл-ов массива я знаю. Мне бы добавлять в массив хотелось. А если я создам массив, ну 10 эл-ов, то как мне 11й добавить. Подскажите.
← →
Виктор Щербаков (2002-05-15 13:42) [4]Reticent © (15.05.02 13:40)
SetLength
← →
Reticent (2002-05-15 15:20) [5]нуу лююююдиии... ну я даже код привел. Спасибо за желание помочь, но если тоже самое пишут, то я ни на шаг не сдвинусь от проблемы.
Или же тут имеется ввиду ЕЩЕ РАЗ SetLength написать? А старые данные тогда не потеряются??
← →
yaJohn (2002-05-15 15:27) [6]Задача АднАзнА сводится к уже решенной специалистами от Борланд (им можно доверять, сам проверял). см. ответ "Просто гость".
TList и есть динамический массив указателей (например на экземпляры TStringList) с функциональностью для изменения размеров массива.
При SetLength старые даные не теряются, однако сие не документировано (кажется), не гарантировано (кажется) и не есть хороший стиль (точно).
← →
Reticent (2002-05-15 15:48) [7]во! Теперь (почти) все ясно :)
Спасибо большое!
← →
Виктор Щербаков (2002-05-15 15:50) [8]
> При SetLength старые даные не теряются, однако сие не документировано
> (кажется), не гарантировано (кажется) и не есть хороший
> стиль (точно).
Документировано и гарантировано, а потому и стиль нормальный.
Непосредственно в хэлпе по SetLength об этом говорится.
← →
Виктор Щербаков (2002-05-15 15:54) [9]Reticent © (15.05.02 15:48)
Не совсем понятно о чем был вопрос.
О динамических массивах или о TStringList.
Потому и ответы разные: мой и Просто гость (15.05.02 13:36).
Нужно было уточнять.
← →
yaJohn (2002-05-15 16:01) [10]2 Виктор Щербаков
>Existing characters in the string or elements in the array are preserved
Каюсь и посыпаю голову пеплом.
Однако использование TList / TObjectList здесь ИМХО лучший выбор и потенциально избавляет уважаемого Reticent от многих ошибок и недоразумений.
← →
Reticent (2002-05-15 16:17) [11]Всем Огромное спасибо!
Но еще мааааленький вопросик есть к yaJohn:
Как мне из TList доступ к элементам TStringList получить?
Вобщем у меня
l:TList;
sl:TStringList;
...
//теперь я делаю так
l:=TList.Create;
sl.Create;
sl.Add("10");//например
sl.Add("11");
l.Add(sl);
а теперь мне надо sl[1] взять
как ето сделать?
так не идет : l.Items.Strings[1];
← →
Виктор Щербаков (2002-05-15 16:20) [12]
> sl.Create;
Никогда так не пиши!
правильно:
sl := TStringList.Create;
← →
Виктор Щербаков (2002-05-15 16:29) [13]
> так не идет : l.Items.Strings[1];
А не идет потому, что не выполняешь приведение типов:
TStringList(l.Items[нужный_индекс]).Strings[1];
← →
yaJohn (2002-05-15 16:31) [14]var List: TList;
i,j: integer;
begin
List:=TList.Create;
for i:=1 to 100 do List.Add(TStringList.Create);
for i:=0 to List.Count-1 do
TStringList(List[i]).Add("New string in StringList "+inttostr(i));
end;
← →
Reticent (2002-05-15 16:31) [15]уже сообразил :))
но все же как мне взять sl[1] из l ?
← →
Anatoly Podgoretsky (2002-05-15 16:33) [16]yaJohn © (15.05.02 16:01)
и потенциально избавляет уважаемого Reticent от многих ошибок и недоразумений.
:-)
← →
yaJohn (2002-05-15 16:34) [17]TStringList(List[i])[j]:="Hello world";
или в развернутой записи, что полностью аналогично
TStringList(List.Items[i]).Strings[j]:="Hello world";
← →
yaJohn (2002-05-15 16:37) [18]2 Anatoly Podgoretsky
А по Вашему лучше отвечать на вопросы "а почему это у меня память теряется???".
Впрочем, она и тут терятся будет...
← →
Виктор Щербаков (2002-05-15 16:41) [19]yaJohn © (15.05.02 16:37)
Если динамический массив выходит из области видимости, то Delphi освобождает занимаемую им память, а вот о List"ах такого не скажешь.
← →
Reticent (2002-05-15 17:15) [20]Всем спасибо
← →
Anatoly Podgoretsky (2002-05-15 17:25) [21]yaJohn © (15.05.02 16:37)
Да просто твое предположение оказалось далеко от действительности, другими словами оказалось слишком смелыи.
А ты, что смайлик не заметил :-)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c