Borna66
01-02-2010, 03:33 PM
آرایهها در دلفی
دلفی به ما امکان می دهد آرایههایی از هر نوع متغییری را ایجاد کنیم. برای تعریف آرایه به صورت زیر عمل میکنیم:
var
array[indexType1, ..., indexTypen] of baseType;
در این تعریف برای نامگذاری آرایه، از قانون نامگذاری متغییرها استفاده میکنیم و مقدار اولیه را نیز درون یک جفت کروشه قرار می دهیم.
نکته: شما می توانید به جای استفاده از کروشه [] از ترکیب پرانتز نقطه استفاده کنید:
کد:
d(.i.):= 3 + i; // Equivalent d:= 3 + i;
نکته: وقتی که شما یک آرایه را تعریف می کنید احتیاجی ندارید که به آن مقدار کمترین یا بیشترین بدهید:
var
A : array [Boolean] of integer;
begin
A[True] := 50;
A[False] := 100;
end;
نکته: توابع Low و High کرانهای پایین وبالای یک متغییر آرایهای یا نوعی یا ترتیبی را بر میگردانند:
کد:
کد:
for I := 0 to High(X) do S := S + X;آرایههای ثابت:
آرایه های ثابت می توانند توسط ساختار ثابت نوع دلفی تعریف شود. نوع ثابت که همیشه با عبارت Const تعریف می شود، نه تنها مانع تغییر مقدار پارامتر می شود، بلکه کدهای بهینه بیشتری برای رشتهها و رکوردهای رد شده به توابع تولید می کند. ما هنگامی از این نوع استفاده می کنیم که نخواهیم مقدار رد شده به یک تابع تغییر کند.
type
TDay = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday);
const
DayNames : array [TDay] of String[9] = ('Sunday', 'Monday', 'Tuesday',
'Wednesday', 'Thursday',
'Friday', 'Saturday');
var
Today : TDay;
begin
Today := TDay(DayOfWeek(Date) - 1);
ShowMessage('Today is ' + DayNames[Today] + '!');
end;
آرایههای دینامیکی:
آرایههای دینامیکی، آرایههای تحلیلی پویایی هستند که ابعاد آنها موقع کامپایل شدن شناخته شده نیست. برای اعلان آنها کافی است یک آرایه بدون بعد تعریف کنید:
var MyFlexibleArray: array of Real;قبل از به کار گیری آرایههای دینامیکی، ابتدا باید از رویه SetLength برای تخصیص حافظه آرایه استفاده کرد:
کد:
کد:
SetLength (MyFlexibleArray, 2; (نکته: آرایههای دینامیکی همیشه مبتنی بر صفر می باشند.
نکته: شما میتوانید آرایههای دینامیکی را قبل از رسیدن به ترک قلمرو از حافظه خارج کنید:
کد:
کد:
MyFlexibleArray := nil;نکته: مقدار حافظهای که در اختیار آرایه قرار میگیرد، به طول آرایه ونوع عناصر آن بستگی دارد. به عنوان مثال اگر آرایهای از نوع صحیح به طول 10 داشته باشیم 4*10 بایت حافظه به آن اختصاص مییابد.
فشردهسازی آرایهها:
در دلفی شما هنگامی که ساختار خود را تعیین کردید میتوانید با استفاده از کلمه کلیدی packed اطلاعات ذخیره شده خود را متراکم کنید:
کد:
کد:
type TNumbers = packed array[1..100] of Real;نکته: استفاده از packed سرعت دسترسی به اطلاعات را کند میکند. در مورد آرایهای از کاراکترها این مورد سازگارتر میباشد.
آرایههای چند بعدی دینامیکی:
برای تعریف آرایههای چند بعدی دینامیکی، تنها کافی است ...array of را در ساختار خود تکرار کنید. به طور مثال:
type
TMessageGrid = array of array of string;
var
Msgs: TMessageGrid;
این تعریف یک آرایه دو بعدی از رشتهها می باشد. سپس باید به آرایه خود فضا نسبت داد:
کد:
کد:
SetLength(Msgs, I, J); شما میتوانید آرایههای چند بعدی دینامیکی خود را به صورت غیر مستطیلی (Not Rectangular) ایجاد کنید. ابتدا رویه SetLength را صدا زده و پارامتر بعد اول را بدهید:
var
Ints: array of array of Integer;
SetLength(Ints, 10);
ما 10 سطر به آرایه خود اختصاص دادیم. از این پس، شما می توانید ستونهای خود را در هر زمان (با اندازههای مختلف) تخصیص دهید:
کد:
کد:
SetLength(Ints[2], 5);
دلفی به ما امکان می دهد آرایههایی از هر نوع متغییری را ایجاد کنیم. برای تعریف آرایه به صورت زیر عمل میکنیم:
var
array[indexType1, ..., indexTypen] of baseType;
در این تعریف برای نامگذاری آرایه، از قانون نامگذاری متغییرها استفاده میکنیم و مقدار اولیه را نیز درون یک جفت کروشه قرار می دهیم.
نکته: شما می توانید به جای استفاده از کروشه [] از ترکیب پرانتز نقطه استفاده کنید:
کد:
d(.i.):= 3 + i; // Equivalent d:= 3 + i;
نکته: وقتی که شما یک آرایه را تعریف می کنید احتیاجی ندارید که به آن مقدار کمترین یا بیشترین بدهید:
var
A : array [Boolean] of integer;
begin
A[True] := 50;
A[False] := 100;
end;
نکته: توابع Low و High کرانهای پایین وبالای یک متغییر آرایهای یا نوعی یا ترتیبی را بر میگردانند:
کد:
کد:
for I := 0 to High(X) do S := S + X;آرایههای ثابت:
آرایه های ثابت می توانند توسط ساختار ثابت نوع دلفی تعریف شود. نوع ثابت که همیشه با عبارت Const تعریف می شود، نه تنها مانع تغییر مقدار پارامتر می شود، بلکه کدهای بهینه بیشتری برای رشتهها و رکوردهای رد شده به توابع تولید می کند. ما هنگامی از این نوع استفاده می کنیم که نخواهیم مقدار رد شده به یک تابع تغییر کند.
type
TDay = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday);
const
DayNames : array [TDay] of String[9] = ('Sunday', 'Monday', 'Tuesday',
'Wednesday', 'Thursday',
'Friday', 'Saturday');
var
Today : TDay;
begin
Today := TDay(DayOfWeek(Date) - 1);
ShowMessage('Today is ' + DayNames[Today] + '!');
end;
آرایههای دینامیکی:
آرایههای دینامیکی، آرایههای تحلیلی پویایی هستند که ابعاد آنها موقع کامپایل شدن شناخته شده نیست. برای اعلان آنها کافی است یک آرایه بدون بعد تعریف کنید:
var MyFlexibleArray: array of Real;قبل از به کار گیری آرایههای دینامیکی، ابتدا باید از رویه SetLength برای تخصیص حافظه آرایه استفاده کرد:
کد:
کد:
SetLength (MyFlexibleArray, 2; (نکته: آرایههای دینامیکی همیشه مبتنی بر صفر می باشند.
نکته: شما میتوانید آرایههای دینامیکی را قبل از رسیدن به ترک قلمرو از حافظه خارج کنید:
کد:
کد:
MyFlexibleArray := nil;نکته: مقدار حافظهای که در اختیار آرایه قرار میگیرد، به طول آرایه ونوع عناصر آن بستگی دارد. به عنوان مثال اگر آرایهای از نوع صحیح به طول 10 داشته باشیم 4*10 بایت حافظه به آن اختصاص مییابد.
فشردهسازی آرایهها:
در دلفی شما هنگامی که ساختار خود را تعیین کردید میتوانید با استفاده از کلمه کلیدی packed اطلاعات ذخیره شده خود را متراکم کنید:
کد:
کد:
type TNumbers = packed array[1..100] of Real;نکته: استفاده از packed سرعت دسترسی به اطلاعات را کند میکند. در مورد آرایهای از کاراکترها این مورد سازگارتر میباشد.
آرایههای چند بعدی دینامیکی:
برای تعریف آرایههای چند بعدی دینامیکی، تنها کافی است ...array of را در ساختار خود تکرار کنید. به طور مثال:
type
TMessageGrid = array of array of string;
var
Msgs: TMessageGrid;
این تعریف یک آرایه دو بعدی از رشتهها می باشد. سپس باید به آرایه خود فضا نسبت داد:
کد:
کد:
SetLength(Msgs, I, J); شما میتوانید آرایههای چند بعدی دینامیکی خود را به صورت غیر مستطیلی (Not Rectangular) ایجاد کنید. ابتدا رویه SetLength را صدا زده و پارامتر بعد اول را بدهید:
var
Ints: array of array of Integer;
SetLength(Ints, 10);
ما 10 سطر به آرایه خود اختصاص دادیم. از این پس، شما می توانید ستونهای خود را در هر زمان (با اندازههای مختلف) تخصیص دهید:
کد:
کد:
SetLength(Ints[2], 5);