Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
ВнизСравить два массива. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.049 c