Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамические массивы [D4, Win2k]


Страницы:   1 2

Reticent ©   (2002-05-15 13:32:00) 

Доброе время суток!

Вопрос, наверное, детский.
У меня есть
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 :))

Всего хорошего!


Anatoly Podgoretsky   (2002-05-15 17:25:00) [1]

yaJohn © (15.05.02 16:37)
Да просто твое предположение оказалось далеко от действительности, другими словами оказалось слишком смелыи.
А ты, что смайлик не заметил :-)


Reticent   (2002-05-15 17:15:00) [2]

Всем спасибо


Виктор Щербаков   (2002-05-15 16:41:00) [3]

yaJohn © (15.05.02 16:37)
Если динамический массив выходит из области видимости, то Delphi освобождает занимаемую им память, а вот о List"ах такого не скажешь.


yaJohn   (2002-05-15 16:37:00) [4]

2 Anatoly Podgoretsky
А по Вашему лучше отвечать на вопросы "а почему это у меня память теряется???".
Впрочем, она и тут терятся будет...


yaJohn   (2002-05-15 16:34:00) [5]

TStringList(List[i])[j]:="Hello world";
или в развернутой записи, что полностью аналогично
TStringList(List.Items[i]).Strings[j]:="Hello world";


Anatoly Podgoretsky   (2002-05-15 16:33:00) [6]

yaJohn © (15.05.02 16:01)
и потенциально избавляет уважаемого Reticent от многих ошибок и недоразумений.

:-)


Reticent   (2002-05-15 16:31:00) [7]

уже сообразил :))

но все же как мне взять sl[1] из l ?


yaJohn   (2002-05-15 16:31:00) [8]

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;


Виктор Щербаков   (2002-05-15 16:29:00) [9]


> так не идет : l.Items.Strings[1];

А не идет потому, что не выполняешь приведение типов:
TStringList(l.Items[нужный_индекс]).Strings[1];


Виктор Щербаков   (2002-05-15 16:20:00) [10]


> sl.Create;

Никогда так не пиши!
правильно:
sl := TStringList.Create;


Reticent   (2002-05-15 16:17:00) [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];


yaJohn   (2002-05-15 16:01:00) [12]

2 Виктор Щербаков
>Existing characters in the string or elements in the array are preserved
Каюсь и посыпаю голову пеплом.
Однако использование TList / TObjectList здесь ИМХО лучшийвыбор и потенциально избавляет уважаемого Reticent от многих ошибок и недоразумений.


Виктор Щербаков   (2002-05-15 15:54:00) [13]

Reticent © (15.05.02 15:48)
Не совсем понятно о чем был вопрос.
О динамических массивах или о TStringList.
Потому и ответы разные: мой и Просто гость (15.05.02 13:36).
Нужно было уточнять.


Виктор Щербаков   (2002-05-15 15:50:00) [14]


> При SetLength старые даные не теряются, однако сие не документировано
> (кажется), не гарантировано (кажется) и не есть хороший
> стиль (точно).

Документировано и гарантировано, а потому и стиль нормальный.
Непосредственно в хэлпе по SetLength об этом говорится.


Reticent   (2002-05-15 15:48:00) [15]

во! Теперь (почти) все ясно :)

Спасибо большое!


yaJohn   (2002-05-15 15:27:00) [16]

Задача АднАзнА сводится к уже решенной специалистами от Борланд (им можно доверять, сам проверял). см. ответ "Просто гость".
TList и есть динамический массив указателей (например на экземпляры TStringList) с функциональностью для изменения размеров массива.
При SetLength старые даные не теряются, однако сие не документировано (кажется), не гарантировано (кажется) и не есть хороший стиль (точно).


Reticent   (2002-05-15 15:20:00) [17]

нуу лююююдиии... ну я даже код привел. Спасибо за желание помочь, но если тоже самое пишут, то я ни на шаг не сдвинусь от проблемы.

Или же тут имеется ввиду ЕЩЕ РАЗ SetLength написать? А старые данные тогда не потеряются??


Виктор Щербаков   (2002-05-15 13:42:00) [18]

Reticent © (15.05.02 13:40)
SetLength


Reticent   (2002-05-15 13:40:00) [19]

как узнать кол-во эл-ов массива я знаю. Мне бы добавлять в массив хотелось. А если я создам массив, ну 10 эл-ов, то как мне 11й добавить. Подскажите.


Просто гость   (2002-05-15 13:36:00) [20]

Используй TList


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо