Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.09;
Скачать: CL | DM;

Вниз

А как можно присвоить один типизированный массив другому   Найти похожие ветки 

 
msgipss   (2002-12-26 13:59) [0]

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

b,a:array of type1
.....
как присвоить один массив другому не перебирая и присваивая поэлементно


 
Song ©   (2002-12-26 14:03) [1]

a:=b ?
В паскале помнится, прокатывало..


 
ZrenBy ©   (2002-12-26 14:10) [2]

CopyMemory


 
Anatoly Podgoretsky ©   (2002-12-26 14:15) [3]

ZrenBy © (26.12.02 14:10)
Ну да

type
type1 = array of array of ...



 
icWasya ©   (2002-12-26 15:55) [4]

a:=system.copy(B,Low(B),Length(B));


 
gsu ©   (2002-12-26 16:12) [5]

Для статических a:=b - угу, для динамических это присваивание указателей, но не копирование элементов. А вообще copy, хотя она временами ся странно ведет ...


 
msgipss   (2002-12-27 05:06) [6]

что то массив типа
type xxx=record
x1:word;
x2:string;
yyy=array of xxx;
zzz=array of yyy;
var zzz1,zzz2:zzz;
....
zzz1:=system.copy(zzz2,Low(zzz2),Length(zzz2));

не хочет копироваться, 8(


 
Дурак2   (2002-12-27 05:13) [7]

с динамическими массивами работаю только поэлементно.


 
msgipss   (2002-12-27 08:59) [8]

придется по старинке поэлементно, думал может уже есть чего поинтереснее, 8)


 
msgipss   (2002-12-27 08:59) [9]

придется по старинке поэлементно, думал может уже есть чего поинтереснее, 8)
всем спасибо....


 
perov ©   (2002-12-27 09:15) [10]

для динамических массивов можно залочить (LockArray вродебы) их и system.copy


 
VaS ©   (2002-12-27 10:19) [11]

У тебя в элементах массива (записях) имеются указатели (дин. массивы). Их тоже надо move-ать. Так что только поэлементно с копированием данных по указателям записей.


 
ИгорЁк   (2002-12-27 10:45) [12]

а если так?

SetLength(zzz2, Length(zzz1)):
Move(zzz1[0], zzz2[0], Length(zzz1)*SizeOF(xxx));


 
shane54 ©   (2002-12-27 11:06) [13]

Всё проще.

type
MyType = array[1..N] of integer;
var
Mas1, Mas2 : MyType;
begin
....
....
Mas1 := Mas2;
end;


Такой вот нехитрой уловкой обходится ограничение с присваиванием массивов.


 
Дурак2   (2002-12-27 11:20) [14]

А мы тут колбасимся - а все так просто ;-)
Может и вечный двигатель сделаешь?


 
shane54 ©   (2002-12-27 11:56) [15]

Ник подходит


 
Севостьянов Игорь ©   (2002-12-27 11:56) [16]


> shane54 © (27.12.02 11:06)

Действительно какой у него "динамический" массив однако


 
Дурак2   (2002-12-27 12:32) [17]


> shane54 © (27.12.02 11:56)
> Ник подходит

Подходит? - так бери - не жалко.


 
gsu ©   (2002-12-27 14:02) [18]

>> shane54 © (27.12.02 11:06)
>> Всё проще.

Да, ладно - он нечаянно.


 
les ©   (2002-12-27 16:30) [19]

В модуле system есть несколько очччень интересних (правда совсем недокументированих функций) (D5):
procedure _DynArrayCopy(a: Pointer; typeInfo: Pointer; var Result: Pointer);
procedure _DynArrayCopyRange(a: Pointer; typeInfo: Pointer; index, count : Integer; var Result: Pointer);
procedure _DynArrayAsg;

procedure _CopyArray;

procedure CopyArray(dest, source, typeInfo: Pointer; cnt: Integer); - ета вообще не импортируется.

typeInfo получаешь через функцию TypeInfo (как ни странно :). Попробуй.


 
Alex Konshin   (2002-12-28 05:18) [20]

2msgipss: Ты просто забываешь о том, что у тебя массив массивов, т.е. каждый элемент - ДИНАМИЧЕСКИЙ массив.
CopyMemory и System.Move скопирует некий кусок памяти, и что толку? Здесь же мы имеем массив указателей на другие куски памяти, я уж не говорю о том, что дин.массив имеет заголок и счетчик ссылок в нем.
System.Copy вроде должен скопировать массив, но ты получишь новый массив ссылок на старые массивы.
Короче, les ответил, что нужно делать, но если посмотреть в код, то ясно, что там просто поэлементно все копируется.



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

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

Наверх




Память: 0.51 MB
Время: 0.013 c
1-24886
sad
2002-12-25 15:38
2003.01.09
TeeChart и коэффициенты


7-25112
turonix
2002-10-27 21:41
2003.01.09
В чем ошибка?


7-25122
Lamer2000
2002-07-30 12:34
2003.01.09
Перехват нажати кнопки.


4-25157
belocarsk
2002-11-22 04:46
2003.01.09
Dos окна


1-24934
Calm
2002-12-26 12:19
2003.01.09
Как узнать имя класса окна чужой программы?