sunyboy
04-24-2009, 01:45 AM
دلفي به ما امکان مي دهد آرايههايي از هر نوع متغييري را ايجاد کنيم. براي تعريف آرايه به صورت زير عمل ميکنيم:
var
array[indexType1, ..., indexTypen] of baseType;
در اين تعريف براي نامگذاري آرايه، از قانون نامگذاري متغييرها استفاده ميکنيم و مقدار اوليه را نيز درون يک جفت کروشه قرار مي دهيم.
نکته: شما مي توانيد به جاي استفاده از کروشه [] از ترکيب پرانتز نقطه استفاده کنيد:
d(.i.):= 3 + i; // Equivalent d[i]:= 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[I];
آرايههاي ثابت:
آرايه هاي ثابت مي توانند توسط ساختار ثابت نوع دلفي تعريف شود. نوع ثابت که هميشه با عبارت 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[i]:= 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[I];
آرايههاي ثابت:
آرايه هاي ثابت مي توانند توسط ساختار ثابت نوع دلفي تعريف شود. نوع ثابت که هميشه با عبارت 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);