ورود

View Full Version : کپی آرایه ها در دلفی



joker
جمعه 11 شهریور 1390, 14:07 عصر
کد زیر را در نظر بگیرید ، 2 آرایه از یک جنس


var
buf : array [1..100] of char;
buf2 : array [1..100] of char;


دلفی اجازه کپی شدن buf := buf2 را نمیده


1 - چطوری میتونم بافر یک را یکجا کپی کنم در بافر 2 ؟
2- چطوری میتونم مثلا از اندیس 10 به بعد بافر یک را در بافر 2 شروع کنم به کپی؟

روشی غیر از استفاده از حلقه فور و جایگزینی تک به تک میخوام. چون بعضی مواقع ممکنه ارایه ای با طول بزرگ داشته باشم و مطمئنا حلقه فور در مقادیر بالا و تعداد زیاد بار زیادی به صورت مستقیم روی cpu میزاره

Felony
جمعه 11 شهریور 1390, 14:47 عصر
با استفاده از تابع Move :

var
Arr1, Arr2, MergedArr: Array of string;
I: Integer;
begin
SetLength(Arr1, 5000000);
for I := Low(Arr1) to High(Arr1) do
Arr1[I] := IntToStr(I);

SetLength(Arr2, 5000000);
for I := Low(Arr2) to High(Arr2) do
Arr2[I] := IntToStr(I);

// Set length of MergedArr to length of ( Arra1 + Arr2 )+ 2
SetLength(MergedArr, High(Arr1) + High(Arr2) + 2);

// Add Arr1 to MergedArr
Move(Arr1[ Low(Arr1)], MergedArr[ Low(MergedArr)],
Length(Arr1) * SizeOf(Arr1[0]));

// Add Arr2 to MergedArr
Move(Arr2[ Low(Arr2)], MergedArr[ High(Arr1) + 1],
Length(Arr2) * SizeOf(Arr2[0]));

// Cleanup Arr1 and Arr2
FillChar(Arr1[ Low(Arr1)], Length(Arr1) * SizeOf(Arr1[0]), 0);
FillChar(Arr2[ Low(Arr2)], Length(Arr2) * SizeOf(Arr2[0]), 0);

ShowMessageFmt
('Arr1 and Arr2 was copied to MergedArr , Now Length of MergedArr is : %s',
[IntToStr(Length(MergedArr))]);
end;

کپی 10 میلیون خانه برای من حدود 3 ثانیه طول کشید .