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