Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.30;
Скачать: 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 вся ветка

Текущий архив: 2005.01.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.038 c
3-1104213194
izi
2004-12-28 08:53
2005.01.30
как пользоваться DbTree


8-1095095132
maxistent
2004-09-13 21:05
2005.01.30
Сравнивание TBitMap


1-1105943055
DelphiN!
2005-01-17 09:24
2005.01.30
Отключить контексное меню TWebBrowser-a


4-1102951073
The Scorpion
2004-12-13 18:17
2005.01.30
Уведомление DLL_PROCESS_DETACH


14-1105518608
syte_ser78
2005-01-12 11:30
2005.01.30
Господа, кто писал под Автокад?