فرا آرایه یا آرایه ی چند بعدی :
تذکر : این قسمت آموزش فرا آرایه نیست بلکه آموزش آرایه ی چند بعدی هه . و هر وقت تو این پست حرف از فرا آرایه زده شد ، شما آرایه ی چند بعدی رو جاش بزارین . فرا آرایه یه چیز دیگه هست که تو آخرین پست گفته میشه
قبل از همه جا داره یه تشکر حسابی از آقا محمد (سید اهل انجمن ) کنم که واقعا تا آخرین سئوالات من جواب داد. فعلا که جز تشکر خشک و خالی نمیتونم کنم . ان شاء ا... جبران کنم (نمیتونم )
بعد بگم که حتما باید پست فرا آرایه رو که تو صفحات قبل هه بخونین تا این مطالب براتون نا آشنا نباشه و راحت تر یاد بگیرین
همونطور که تو همون پست گفته شد ، مهم ترین ویژگی فرا آرایه اینه که چون حالت چند بعدی (هر تعداد مثل 3 یا 4 بعدی و ...) هستن ، میشه کار چندین آرایه رو تو یه آرایه انجام داد . منظور از چند بعدی اینه که چندین اندیس (عدد داخل پرانتز آرایه ها) که همون نوعی متغییر هستن میشه براش تعریف کرد پس بجا اینکه چندین آرایه تعریف کرد ، میشه همه ی اون آرایه ها رو (هر چند تا میخان باشن) فقط تو یه فرا آرایه ی چند بعدی خلاصه کرد که کار رو فوق العاده آسون و سریعتر میکنه و علاوه بر اون ویژگی دیگه شم اینه که میشه دو تا فرا آرایه ی مختلف و حتی عضوهای مختلف یه فرا آرایه رو میتونیم روش عملیات ریاضی (جمع و کم و ...) و ... انجام بدیم.
تعریف فرا آرایه ی چند بعدی :
همون دقیق مثل فرا آرایه ی قبلی هه اما هر جا داخل فرا آرایه ، متغییر دیدین ، نزارین . همین یَندِک
مثلا تو همون پست قبلی که درباره ی فرا آرایه بود مثال زیر یکیش بود :
کد:
Array={v={ 7, 1, 30},y=20,z=30}
برا تبدیل این به چند بعدی ، کافیه هر چی داخل فرا آرایه ی Array ، متغییر میبینین ، حذف کنین ینی کنینش :
کد:
Array={{7,1,30},20,30}
فراخونی فرا آرایه ی چند بعدی :
همیشه یکی از مهم ترین مباحث فراخونی هه . قبل از این بزارین یه مثال بسیار ساده از فراخونی آرایه بگم که همه تون بلدین . تو آرایه ی
وقتی میگین ABC[2] ینی چی؟ نخندین . بال بِنِه بَزِه بَمِرداشون (این تیکه مخصوص زبون خودمه . مازندرانی کی این دور و بره؟ ترجمه نکنه ) الان میگین خوب هر کی میدونه ینی دومین عضو آرایه ی ABC . آری اما این جوری معنی کنین . ینی دومین آرگومان یا ورودی یا همون بعد از دومین ویرگول از آرایه ی ماقبل خودشABC هست . آرگومان هم که ملومه دیگه چیه. هر جا ویرگول شد ، میشه آرگومان بعدی (البته ورودی نمیشه گفت چون باید متغییر دریافت بشه که روش الگوریتم پیاده شه که مخصوص توابع هست). الان تو بالا ، 54 میشه آرگومان اول و 65 که میشه بعد ویروگول میشه دومیش و 3 هم که بازم بعد ویرگوله میشه سومیش (آرگومان حالا میخاد یا عضو هست یا زیر آرایه)
بازم قبل از چیزای دیگه با چن تا دیگه از فرا آرایه ی چند بعدی آشنا شین . مثال ها :
کد:
Array={{{"ali",54,"Salam"},{true,789,"Payam"}},{4,Moteghaeir,75},{985},"BedoneZirArrayeh",25}
حالا های مثال ها رو بردارین . همین یکی بسه و ملومه دیگه مثل فرا آرایه ای که قبلا گفته شد ، داخلشون به اندازه ی نا محدود میشه بازم آرایه تعریف کرد اما بدون متغییر
اول نحوه ی فراخونی رو بگم این جوریه که اول اسم فرا آرایه رو مینویسین و بعد یه اندیس میزارین و داخلش ، شماره ی آرگومان داخل اون آرایه ی قبلی رو مینویسین و بازم بعدش اندیس میزارین و شماره ی آرگومان داخل آرایه ی قبلی اش رو مینویسین و قص علی هذا (ینی و غیره عربی ام گل کرد) تا اینکه تو اندیس آخر ، شماره ی عضو اون آرایه یا زیر آرایه ای رو که میخاین ، بدین
حالا چند مثال از فراخونی (این بار جمع واقعیه ها . واقعا چن تا طوماره ) :
1) تو فرا آرایه ی
کد:
Array={{7,1,30},20,30}
عدد 1 فراخونیش چجوریه؟
داخل فرا آرایه ی Array ، زیر آرایه ای که عدد 1 توش هستش تو آرگومان اول هه ینی اولین آرگومان آرایه ی ماقبل اش که Array هست رو مینویسیم که تا اینجای کار میشه :
حالا دیگه داخل این زیر آرایه ، فقط اعضاش میمونه که چون 2 رو میخایم عدد 2 رو تو اندیس بعدی مینویسیم ینی کلا میشه :
تا اینجا دید یو آندرستند (تود)؟ ندید یو؟ خاهید دید یو
مقدار این تو زیر چی میشه؟ :
خوب این که دیگه ملومه فقط آرایه هست نه فرا آرایه یا چند بعدی . چون یه دونه اندیس فقط داره و آخرین اندیس هم شماره ی عضو رو ملوم میکرد. از این حالت هم متوجه نشین ، از همون حالت قبل میریم ینی داخل فرا آرایه ی Array ، سومین آرگومان اش چی میشه تو اینجا هم آرگومان منظورش چیه؟ منظورش همون سومین عضوه . اولین آرگومان اش که همون زیر آرایه میشه و دومیش که 20 و سومیش 30 هه که ملومه
من برم شام بخورم بیام
اگه گفتین چی داشتیم؟ دلتون خربزه
2) تو فرا آرایه ی
کد:
Array={{{7,1,30},{780}},{20,45},50,80,95,{451,313}}
این فراخونی زیر برا کدوم عدده؟ :
و همینطور به ترتیب عددهای 313 و 30 و 780 و 20 چجوری فراخونی میشن؟
اول قسمت الف ینی فراخونی برا کدوم عدده رو بگم . گفت Array[1] منی این چی بود؟ این بود که اولین آرگومان داخل آرایه ی ماقبل خودش ینی اولین آرگومان داخل آرایه ی Array . خوب . داخل آرایه ی Array اولین آرگومان اش کدومه؟ چون داخل آرگومان اول ، چند تا زیر آرایه هست ، خوب ملومه دیگه ینی منظورش کل زیر آرایه هایی هه که تو آرگومان اول تعریف و پرانتزش باز و بسته شد . پس منظورش تا اینجا میشه :
حالا اندیس بعدی که 2 هه . ینی چی ینی دومین آرگومان داخل آرایه ی قبلی خودش . آرایه ی قبلی چی بود؟ همین خط بالاییه دیگه . ینی دومین آرگومان داخل این خط بالاییه . اولین آرگومان اش که میشه
این آرایه و دومیشم که میشه :
پس منظورش اینه و آخری هم که شماره ی عضوه که ملومه تو این آرایه ، یه عضو بیشتر نیست پس جواب یا مقدار فراخونی :
میشه 780
جواب سئوال قسمت ب برا عدد 313 :
عدد 313 داخل کدوم زیر آرایه هست؟ ینی شماره ی آرگومان اون زیر آرایه ، چنده؟ اولین آرگومان فرا آرایه ی Array که میشه
دومیشم که میشه
سومیش میشه 50 و چارمیش 80 و پنجمیش 95 و شیشمیش که میشه همون زیر آرایه ی مورد نظر ما که
هست . پس اولین اندیس اش میشه 6 . حالا 313 چندیمین عضو این زیر آرایه هه؟ دومی دیگه پس فراخونیش میشه :
برای عدد 30 :
برا اینکار هم از داخل فرا آرایه ی اصلی شرو کنین و هر جا که به آرگومان مورد نظر رسیدین ، عدد اون رو داخل اندیس بنویسین و همینطور برا آرگومان بعدی ، دوباره تو اندیس کناریش و ... تا به شماره ی عضوش برسین
برا عدد 30 ابتدا، به اولین آرگومان برخورد میکنیم که
هست پس اینجا تو اولین اندیس عدد 1 را مینویسیم . برا اندیس بعدی ، بازم داخل این ، عدد 30 رو تو آرگومان اول میبینیم که بازم زیر آرایه هست . که میشه این آرایه :
پس بازم اندیس 1 میدیم و برا اندیس بعدی هم میمونه شماره ی عضو عدد 30 که میشه 3 پس کلا میشه :
عدد 780 که جوابش تو قسمت الف داده شد . میمونه عدد 20
این زیر آرایه
چندمین آرگومان Array هه؟ خوب ملومه دومی. پس اولین اندیسش میشه 2 و اندیس بعدی هم که شماره ی عضو عدد 20 رو باید بنویسیم که اولین عضوش هست پس میشه :
بازم دیدید؟ ینی دید یو آندرستودینگا؟ هاتی اینگا پاتی اینگا؟ منم هنگ کردنینگا والا . بده یه قرن نوشتن ، کروم قات زد ، اون وری هم تو انجمن ذخیره نشد ، مردم دارم دوباره مینویسم
تعریف فرا آرایه ی چند بعدی به روش کاربردی تر :
خوب گلپسران میدونین که تعریف آرایه دو روش داره که اون روش کاربردی تر که خیلی راحت تره و دقیق موقه فراخونی هم ازش استفاده کردیم گفته نشد که گفته میشه
قبل از توضیح ادامه ی این مطلب ، دقیق تو فرا آرایه ای که چن صفه پیش گفته شد و اگه میخاستین تعریف کنین ، همه ی اعضاشو (که اونجا اعضاشون میشه گفت متغییر بودن و با نقطه از هم جدا میشدن) باید به عنوان آرایه تعریف میکردین ینی علامت آرایه که {} هست میزاشتین ، اینجا هم همینطوره . مثلا تو اونجا برا تعریف Array.AddedSoftware.Patch باید اینجوری مینوشتین :
کد:
Array={}
Array.AddedSoftware={}
Array.AddedSoftware.Patch={}
و حالا عضوهای زیر آرایه ی Array.AddedSoftware.Patch رو ملوم میکردین
تو اینجا هم خوب آخرین عضوه که لازم به این کار نیست براش ینی اندیس آخری رو کاری باهاش ندارین چون عضو آرایه هست ولی برای تمام اندیس های قبلیش به همراه فرا آرایه ی اصلی که اسمه ، دونه دونه آرایه تعریف میکنین ینی برابر علامت آرایه میگیرین مثل بالا . مثلا اگه مقداری فراخونی شد که 4 تا اندیس داره (بجز آخری) برا بقیه ، دونه دونه آرایه تعریف میکنین . مثلا برا فراخونی این:
اون آخری اندیس که 2 هست که شماره ی عضوه که هیچ چی (ینی اون باید برابر مقدار که یا عدده یا رشته یا بولین حتما گرفته بشه وگرنه nil یا پوچ میشه مقدارش) و منظورم از هیچ چی اینه که برا اون علامت آرایه لازم نیست بزاری (چون صوبت فلا سر علامت آرایه گرفتنه) و برا دونه دونه اندیس های قبلیش باید آرایه تعریف کنین مثل مثال بالا ینی باید حتما قبلش اینو بنویسین :
کد:
Array={}
Array[4] = {}
Array[1] = {}
Array[4] = {}
حتما هم لازم نیست همه ی زیر آرایه ها تعریف بشن یا همه ی اعضاشون . مثلا میتونیم بدون اینکه زیر آرایه ی اول رو تعریف کنیم ، بپریم رو دومی و دومی رو تعریف کنیم ولی یادمون باشه هر کدوم رو که تعریف نکنیم ولی فراخونی کنیم (چه عضو یا چه زیر آرایه) ، مقدارش برابر nil میشه که ملومه مثلا :
میتونیم مستقیم فقط همین رو تعریف کنیم بدون اینکه زیر آرایه یا عضوهای دیگه رو تعریف کنیم اما بقیه ی اعضا یا زیر آرایه تا تعریف نشن ، برابر nil میمونن که ملومه . منظورم اینه که تو بالا که Array[4] تعریف شد ، حتما نباید Array[1] و Array[2] و Array[3] قبل اش تعریف بشن و میتونیم فقط آرایه برا بالا رو تعریف کنیم بدون اینکه اروری داشته باشیم ینی برا تعریف و مقدار دادن فرا آرایه ی بالا ، قبلش فقط کافیه این رو تعریف کنیم که تو بالا هم گفته شد :
کد:
Array={}
Array[13] = {}
در این مثال بالا هم فقط سیزدهمین زیر آرایه از فرا آرایه ی Array تعریف شد که اولین عضوش برابر 30 هه
مِرِه خو گِج هاکرده (نکِردِه) مازندرانی ندارین بین تون ها . آ راستی اوستا محسن هستا . لو میرم
ادامه اش شد واسه امروز . اولین پستی هه که از روز قبل فرا رفت
خوب حالا بریم چندین مثال (چندین منو که میدونین . همون یه دونه منظورمه ) از ساخت آرایه ی چند بعدی توسط حلقه ی for بزنیم و دنده خلاص
فرض کنین میخایم آرایه ی زیر رو تعریف کنیم :
کد:
Array[2][2][1] = "Ali"
Array[1][1][1] = "hasan"
با استفاده از حلقه ی for ، چجوری قبلش آرایه براشون تعریف میکنیم؟ دیگه این قد که کاری نداره و توضیح دادن نمیخاد که . ها؟ هم نحوه ی ساخت آرایه گفته شد و هم این حلقه رو بلدین پس مستقیم میریم سر وقت جواب :
کد:
Array={}
for i=1,2 do
Array[i] = {}
Array[i][i] = {}
end
دیگه توضیح لازم نیست دیگه . میدونین چرا 2 تا اندیس رو به عنوان آرایه تعریف شد دیگه. تو مثال بالا که گفته شد . به تعداد اندیس ها بجز آخری باید قبلش آرایه تعریف بشه دیگه که تو حلقه ی for شد
**یه نکته :
اگه تو حلقه ی بالا که آرایه تعریف کردین ، این جوری مقدار دهی کنین ، اشتباست و موقه فراخونی ارور میده :
کد:
Array[1][1] = "Ali"
Array[1][1][1] = "hasan"
همون واسه اولی ارور میده که اسم "Ali" هست . چرا؟
چون شما حلقه ی for رو که بررسی کنین ، میبینین این ساختار از آرایه رو تعریف کردین (رشته ی "SomeThing" فقط برا پر کردن عضو هست . تعداد عضو هم میتونه فرق داشته باشه اما من دلخواه ، یه دونه گرفتم برا هر کدوم) :
کد:
Array = {{{"Somthing"},"Somthing"},{"Somthing",{"Somthing"}}}
خوب حالا اگه مقدار دهی ای که قبلا کرده بودین ینی :
رو بررسی کنین ، میبینین که تو ساختار که تعریف کردین ، تو آرگومان ، بجای اون قرمزه ، یه زیر آرایه تعریف کردین اما موقه مقدار دهی ، اون رو زیر آرایه در نظر نگرفتین و مستقیم بهش یه مقدار دادین ینی این جوری گفتین (به پرانتز قسمتی که قرمزه تو بالا و پایین خوب دقت کنین) :
کد:
Array = {{"Somthing","Somthing"},{"Somthing",{"Somthing"}}}
که حالا بجای SomeThing ، مقدار Ali رو تعریف کردین اما دومین تعریف تون درسته که Hasan هست . پس تو این جور تعریفات ، خوب دقت کنین که چی تعریف میکنین به عنوان زیر آرایه یا آرایه ی چند بعدی و چی مقدار دهی میکنین . حواستون به سازگاری اینا مثل بالا باشه
حالا اینم مثال آخر :
کد:
Array = {}
Number = 1
for i=1,3 do
Array[i] = {}
for x=1,3 do
Array[i][x]=Number
Number = Number + 1
end
end
این الگوریتم هم ملومه دیگه . یه فرا آرایه ی 2 بعدی هه که 3 در 3 هست ینی 3 تا آرایه یا زیر آرایه داخلشه که هر کدومشون 3 عضو دارن و دقیق میشه این رو تعریف کردین :
کد:
Array = {{1,2,3},{4,5,6},{7,8,9}}
مِردال شدیم رفتیم نشدیم رفتیم طومار غضنفر علی شاه شد
ان شاء ا.. که یاد گرفته باشین و بازم سر آخر کاری نمیتونم برا سید مون کنم جز یه تشکر خشک و خالی
به نیت اموات خودمون و خودتون و هر کسی که تو کلیه ی این آموزش ها سهیم اند هم یه صلوات بفرستین ، ممنون میشم
علاقه مندی ها (بوک مارک ها)