Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.04.14;
Скачать: [xml.tar.bz2];

Вниз

Быстрое копирование динамических массивов   Найти похожие ветки 

 
kravchuk   (2003-03-31 18:07) [0]

Подскажите, плз, самый быстрый способ копирования динамических
массивов.
<p>Например:</p>
<p> var Src,Dest : array of array of real; </p>
<p>как оптимально массиву Dest присвоить все значения и
структуру массива Src?</p>


 
MBo   (2003-03-31 18:11) [1]

SetLength и присвоение Dest:=Src
можно также move - для каждого подмассива второго уровня


 
han_malign   (2003-03-31 18:30) [2]

> присвоение Dest:=Src
If X and Y are variables of the same dynamic-array type, X :=Y points X to the same array as Y. (There is no need to allocate memory for X before performing this operation.) Unlike strings and static arrays, dynamic arrays are not automatically copied before they are written to.
- не вводите в заблуждение...
Только SetLength+(SetLength + move по подмассивам).


 
MBo   (2003-03-31 18:37) [3]

>han_malign
Согласен. Был неправ.


 
icWasya   (2003-03-31 19:11) [4]

может так
Dest:=Copy(Src);


 
Shaman_Naydak   (2003-03-31 19:17) [5]

var i: Integer;
begin
i:=Length(Src);
SetLength(Dst, i);
for i:=0 to i-1 do
Dst[i]:=Copy(Src[i]);

В данном конкретном случае (двухмерного массива)


 
Shaman_Naydak   (2003-03-31 19:18) [6]

>
icWasya

Вася, ты не прав! Твой вариант подойдет только для одномерного!


 
Palladin   (2003-03-31 19:19) [7]


> icWasya © (31.03.03 19:11)

скопируется массив указателей
и move быстрей


 
kravchuk   (2003-04-01 11:40) [8]

я нашел в файле system.pas функцию
procedure CopyArray(dest, source, typeInfo: Pointer; cnt: Integer);
она может помочь в данном случае?
и если да то как ней пользоваться?


 
Palladin   (2003-04-01 12:28) [9]


> kravchuk © (01.04.03 11:40)

ты зачем сюда пришел? ответы почитать?
дык читай... тебе написали уже ответ...
Shaman_Naydak © (31.03.03 19:17)
используй делай выводы


 
kravchuk   (2003-04-01 12:59) [10]

>Palladin © (01.04.03 12:28)
Ответы я уже прочитал, это второй вопрос




 
malkolinge   (2003-04-01 13:04) [11]

А почему все забыли про
VararrayLock
VararrayUnLock
Что это такое читайте в Хлпе или Калверте


 
Palladin   (2003-04-01 13:16) [12]


> malkolinge © (01.04.03 13:04)

а причем тут это?


> kravchuk © (01.04.03 12:59)

в справке copyarray не освещена, так что наверное не стоит, в любом случае тебе посоветовали
Move


 
kravchuk   (2003-04-01 13:17) [13]

>malkolinge © (01.04.03 13:04)
VararrayLock, VararrayUnLock испльзуются, насколько я понимаю, для variant- массивов


 
les   (2003-04-01 14:39) [14]

Етот вопрос уже когда то поднимали. Я тогда тоже нашел CopyArray (она не публикуется но есть _DynArrayCopy и др.) Сам не пробовал, но насколько можно судить ети функции универсальни - они должни копировать любой дин. масив (двумерний т.д.).

Способ копирования дин. массивов определенно должен бить - ведь копирует же Delphi дин. массив переданий в процедуру по значению. Проблема такая что именно в етом случае (т.е. передача по значению) говорят есть баг в компиляторе (во всяком случае в D5). Поетому попробуй но осторожно.


 
malkolinge   (2003-04-01 14:49) [15]


> VararrayLock, VararrayUnLock испльзуются, насколько я понимаю,
> для variant- массивов

Ой не заметил, я регшил, что динамический вариантный массив. Зарапартовался сорри


 
han_malign   (2003-04-01 14:56) [16]

> Я тогда тоже нашел CopyArray (она не публикуется но есть _DynArrayCopy и др.)
- compiler magic, эти функции как раз вызываются при использовании Copy и SetLength...


 
kravchuk   (2003-04-01 15:38) [17]

>les © (01.04.03 14:39)
посмотрел я процедуру _DynArrayCopy,
использовал ли ее кто то? как получить TDynArrayTypeInfo у существующего динамического массива?


 
les   (2003-04-01 22:47) [18]

Ти знаешь я посмотрел борландовские групи, кажется все таки простое Copy (без параметров Index и Count) т.е. > icWasya © (31.03.03 19:11) - но тут свои проблеми (уже сказано).

Что касается > _DynArrayCopy наверное > han_malign © (01.04.03 14:56) прав.


 
les   (2003-04-01 22:53) [19]


> как получить TDynArrayTypeInfo у существующего динамического
> массива?

Можно попробовать function TypeInfo(TypeIdent): Pointer; но сомневаюсь что так ми витянем больше чем через простое Copy. В любом случае посмотри http://www.tamaracka.com - ето поиск по борландовским групам.



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

Форум: "Основная";
Текущий архив: 2003.04.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
3-44065
hooch
2003-03-26 14:17
2003.04.14
Округление в SQL


14-44437
anbezr
2003-03-29 14:32
2003.04.14
typinfo.pas


7-44462
sachem
2003-02-18 11:07
2003.04.14
Как заблокировать клавиатуру?


3-44058
Dimitry
2003-03-26 12:19
2003.04.14
как без BDE работать с локальными таблицами(с полями Graphics


1-44179
Timer
2003-04-03 20:43
2003.04.14
Работа с RichEdit





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский