Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-88389
Snake
2002-05-02 14:26
2002.05.27
Не работает Locate!


3-88336
KIR
2002-04-29 12:21
2002.05.27
Аналог OnDrawCell в DBGrid


3-88324
Fareader
2002-04-29 19:51
2002.05.27
Two-Phase Commit


1-88533
adav
2002-05-15 11:28
2002.05.27
Invalid floating point operation. Не могу разобраться


3-88357
Voldemar
2002-04-30 21:11
2002.05.27
Печать из QuickReport





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский