Вниз
Скачать: CL | DM;

Сравить два массива.   Найти похожие ветки 

 
Gear   (2005-01-14 22:34) [0]

Как сравнить два массива статический и динамический и в случае если хотябы один элемент совпадает вывести его результат?


 
Gear   (2005-01-14 22:37) [1]

Да, забыл основное. Динамический массив необходимо заполнить зарание из некоторых значений слов в тексте причём заранее неизвестно сколько их будет.


 
Юрий Зотов ©   (2005-01-14 22:41) [2]

Например, так:

Result := -1;
for i := Low(StaticArray) to High(StaticArray) do
 for j := 0 to High(DynamicArray) do
   if StaticArray[i] = DynamicArray[j] then
   begin
     Result := j;
     Exit
   end;


 
Gear   (2005-01-14 22:42) [3]

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


 
Gear   (2005-01-14 22:50) [4]

а как заполнить динамический массив если неизвестна зарание его длина?


 
Юрий Зотов ©   (2005-01-14 22:58) [5]

SetLength(DynamicArray, Length(DynamicArray) + 1);
DynamicArray[High(DynamicArray)] := строка;

Это в цикле, пока не будут считаны и занесены в массив все нужные строки.


 
Gear   (2005-01-14 23:02) [6]

спасибо!!!


 
Anatoly Podgoretsky ©   (2005-01-14 23:51) [7]

Может выгоднее использовать один или два TStringList, поскольку у него есть соответствующие методы.


 
programania ©   (2005-01-15 03:07) [8]

>Юрий Зотов ©   (14.01.05 22:58) [5]
>SetLength(DynamicArray, Length(DynamicArray) + 1);

Для больших массивов >50000 такой способ нереальный
лучше выделять, например, по 1000
в начале:
setLength(DynamicArray,1001); qe:=0; we:=1000;
в цикле:
inc(qe);
if qe>we then begin
 inc(we,1000); setLength(DynamicArray,we+1)
end;
DynamicArray[qe]:=строка;

так 2 массива 14000 и 65000 загружаются из файла за 8 сек.
а по одному за 8 минут и похоже зависимость N*N


 
Юрий Зотов ©   (2005-01-15 09:02) [9]

> programania ©   (15.01.05 03:07) [8]

Это не новость. Только автору вопроса, судя по самому вопросу, пока еще явно не до тонкостей. Ему для начала принципы надо бы понять, а их лучше осваивать на простых схемах. Иначе лес может скрыться за деревьями.

> Gear

Смысл [8] в том, что при такой схеме перераспределение памяти произходит гораздо реже. То есть, снижаются дополнительные затраты времени на служебные операции. Например, можно посмотреть свойство TList.Capacity - там то же самое.


 
TUser ©   (2005-01-15 11:33) [10]


> Gear   (14.01.05 22:42) [3]

Гораздо быстрее получится, если предварительно отсортировать оба массива. Хотя, если "не до тонкостей" - то используй [2].

PS. Но если делаешь это для галочки в зачетке - то лучше докопайся до тонкостей, а то тебе за квадратичный алгоритм галочку неправильную поставят, да еще и [8,9] припомнят :)



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.056 c
14-1105584143
Думкин
2005-01-13 05:42
2005.01.30
С Днем Рождения! 13 января


1-1105613795
pavel_guzhanov
2005-01-13 13:56
2005.01.30
Как остановить работающую программу?


14-1105438926
NewDelpher
2005-01-11 13:22
2005.01.30
генератор 3D-моделей людей


1-1106129382
WondeRu
2005-01-19 13:09
2005.01.30
Отключить стандартную прорисовку потомка от TPanel


8-1098346166
Ricko
2004-10-21 12:09
2005.01.30
Как перенаправить сигнал со входа звуковой карты на выход?




   Наверх