فرا آرایه (MetaTable) :
تذکر : این قسمت آموزش فرا آرایه نیست بلکه آموزش آرایه ی چند بعدی هه . و هر وقت تو این پست حرف از فرا آرایه زده شد ، شما آرایه ی چند بعدی رو جاش بزارین . فرا آرایه یه چیز دیگه هست که تو آخرین پست گفته میشه
همون آرایه ی معمولی خودمونه اما میشه عنصرها یا همون عضوهاش رو برابر یه متغییر گرفت یا حتی برابر یه متغییر نگرفت . مثلا آرایه ی معمولی که این جوریه :
فرا آرایه ای که متغییر داره ، این جوری میشه :
کد:
Array={x=10,y=7,z=3,w="ali"}
یا فرا آرایه ای که متغییر نداره ، این جوری میشه :
کد:
Array = {{10,7,3},"Ali"}
که به این نوع آخر ، آرایه ی چند بعدی هم میگن که یکی از پرکاربردترین و مهم ترین و کارآسون کننده ترین هاست درباره ی این نوع آرایه یا بهتره بگم فراآرایه ی چند بعدی ، تو صفه ی 3 بحث میکنیم (حتما اگه طالب فراآرایه این ، اون مبحث را پی گیری کنین که خیلی مهمه)
ینی خود عضوهاش رو میشه تو یه متغییر دیگه ریخت و نام گزاری کرد متغییر هاش رو اما تو آرایه ی معمولی ، فقط میشه مقدار داد (نه اینکه متغییر همراش نام برد)
مهم ترین ویژگی فرا آرایه اینه که چون حالت چند بعدی (هر تعداد مثل 3 یا 4 بعدی و ...) هستن ، میشه کار چندین آرایه رو تو یه آرایه انجام داد . منظور از چند بعدی اینه که چندین اندیس (عدد داخل پرانتز آرایه ها) که همون نوعی متغییر هستن میشه براش تعریف کرد پس بجا اینکه چندین آرایه تعریف کرد ، میشه همه ی اون آرایه ها رو (هر چند تا میخان باشن) فقط تو یه فرا آرایه ی چند بعدی خلاصه کرد که کار رو فوق العاده آسون و سریعتر میکنه و علاوه بر اون ویژگی دیگه شم اینه که میشه دو تا فرا آرایه ی مختلف و حتی عضوهای مختلف یه فرا آرایه رو میتونیم روش عملیات ریاضی (جمع و کم و ...) و ... انجام بدیم.
تو فرا آرایه ، حتی میشه بجای یه عضو ، یه آرایه ی دیگه نام گذاری تعریف کرد. (خود اون آرایه هم باز میتونه یه آرایه ی معمولی ( بدون متغییر داخلی ) باشه یا یه فرا آرایه باشه که متغییر داشته باشه)
مثلا اگه آرایه ی معمولی (بدون متغییر) باشه :
کد:
a={v={ 7, 1, 30},y=20,z=30}
یا مثلا اگه خودش دارای یه فرا آرایه باشه :
کد:
a={v={x=7,y=1,z=30},y=20,z=30}
این جوری ای که گفتم ، دقیق باید همین جوری نام گذاری کرد . ینی مثل حالت عادی باید تعریف کرد دیگه. ینی وقتی حتی میخایم داخل خود یه فرا آرایه ،آرایه یا فرا آرایه ی دیگه ای رو تعریف کنیم ، مثل حالت عادی ای که تعریف میکنیم ، اون آرایه یا فرا آرایه ی داخلی رو هم باید بهش یه نام بدیم . (که در بالا برابر v گرفتیم)
حالا در اینجا فقط اولین عضو فرا آرایه ی a رو براش آرایه و فرا آرایه ی دیگه ای تعریف کردیم . میتونیم عضوهای دیگه رو هم این جوری کنیم
حالا فراخونی فرا آرایه که مهمترین قسمته :
همونطور که میدونیم برای فراخونی عضوهای یه آرایه ، تو لوا ، 2 روش هست . اگه آرایه فقط مقدار داشت (آرایه معمولی بود) ، عضوها رو با اندیس شماره فراخونی میکنیم که در این صورت برای فراخونی عضو خاصی از آرایه ، اول اسم آرایه ی اصلی رو نام میبریم و بعد دو تا کلوشه باز و بسته میکنیم و اندیسی که بصورت شماره هست رو ، شماره شو تو کلوشه میزاریم ولی اگه اون عضوهای اون آرایه ، خودش متغییر داشت (مثل همین فرا آرایه) ، عضوها رو با اندیس اسم متغییر اش فراخونی میکنیم که در این صورت برای فراخونی عضو خاصی از آرایه ، اول اسم آرایه ی اصلی رو نام میبریم و بعد یه نقطه میزاریم و بعد اسم متغییر اون عضو خاص رو مینویسیم
مثلا دو تا فرا آرایه داریم که فرا آرایه ی اول اسمش a هست و فرا آرایه ی دوم اسمش b :
کد:
a={x=10,y=20,z=30}
b={x=2,y=7,z=5}
خوب حالا مثلا میخایم بگیم که x امین عضو از فرا آرایه ی a که 10 هست رو با x امین عضو از فرا آرایه ی b که 2 هست رو جمع کن ، این جوری فراخونی میکنیم که چون خود عضو های آرایه ، متغییر دارن ، پس باید اسم متغییر هاشون رو برد ینی فراخونی آرایه با روش دوم که تو بالا گفتم پس a.x ینی x امین عضو از فرا آرایه ی a که 10 بود و b.x هم همون x امین عضو از فرا آرایه ی b رو که 2 بود برمیگردونه پس مینویسم :
c=a.x+b.x
ینی 10+2 که میشه 12 رو تو متغییر c ذخیره میکنه و تو کد پایین نمایش میده
کد:
Dialog.Message("Notice", c, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
ما میتونیم هر عضو از یه فرا آرایه رو با هر عضوی که دلمون خاست ، عملیات ریاضی انجام بدیم تو مثال بالا مثلا :
C=a.z+b.x
که z امین عضو از آرایه ی a رو که 30 بود با x امین عضو از آرایه ی b که 2 بود رو جمع میکنه که میشه 32 و تو متغییر c ذخیره میکنه
و حتی فقط عضوهای یه آرایه رو عملیات ریاضی انجام بدیم که خوب ملوم بود و لازم به گفتن نبود.
همینطور میتونیم عضوهای یه فرا آرایه رو با عضوهای یه آرایه ی معمولی با هم ، عملیات ریاضی انجام بدیم مثلا :
کد:
a={x=10,y=20,z=30}
b={ 2, 7, 5}
a که یه فرا آرایه هست و b هم یه آرایه ی معمولی . طرز فراخونی هر دو تا شونو تو همون اول گفتم . اونی که متغییر نداره ، ینی عضوهای آرایه ی معمولی رو با شماره (ای که داخل کلوشه هه) فراخونی میکنیم و عضوهای فرا آرایه رو چون متغییر داره ، با اسم متغییرش (با نقطه قبل اش) فراخونی میکنیم پس اگه میخایم بگیم اولین عضو فرا آرایه ی a رو که 10 هست میشه a.x و اگه میخایم بگیم اولین عضو آرایه ی b که 2 هست میشه b[1] ینی :
که همون 10 رو با 2 جمع میکنه و 12 رو تو c ذخیره میکنه و .. :
کد:
Dialog.Message("Notice", c, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
همین طور که همون اول گفتم ، میتونیم داخل یه فرا آرایه ، یه فرا آرایه ی دیگه ای رو به عنوان عضواش تعریف کنیم و با یکی دیگه عملیات ریاضی انجام بدیم مثلا :
کد:
a={x={x=7,y=1,z=30},y=20,z=30}
b={x=2,y=7,z=5}
در اینجا ما میخایم بگیم اولین عضو از فرا آرایه ی a که خودش هم یه فرا آرایه ای هه بنام x بگیم که اولین عضو از این فرا آرایه ی x رو که متغییری هست بنام x که مقدارش 7 هست رو با اولین عضو از فرا آرایه ی b که متغییر اش x با مقدار 2 هست رو جمع کنه.
همیشه مقدار بعد از آخرین نقطه تو فراخونی ، اندیس یا همون عضو آرایه هست و قبل از اون آخرین نقطه همه شون میشن اسم آرایه پس ینی فقط کافیه برای فراخونی اولین عضو فرا آرایه x که خودش تو فرا آرایه ی a هست ، کلا به ترتیب اسم هر آرایه و هر متغییری رو که میخای ، بزاری و بین شون نقطه بزاری ینی :
a.x.x
ینی همون مقدار 7 که اولین عضو فرا آرایه ی x هه. ینی x امین عضو از فرا آرایه ی x که خودش تو فرا آرایه ی a هه
یا مثلا a.x.y ینی y امین عضو از فرا آرایه ی x که تو فرا آرایه ی a هه که تو مقدار بالا میشه همون 1
خوب حالا بریم سر اصل مطلب که میخاستیم اون 7 رو با 2 که گفته شد جمع کنیم .2 هم که منظورمون همون اولین عضو فرا آرایه ی b بود میشه b.x
پس میشه :
کد:
c = a.x.x + b.x
Dialog.Message("Notice", c, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1
یادتون نره که تو صفه ی 4 پست 39 ، فراآرایه ی چند بعدی رو هم دنبال کنین چون مبحث کاربردی ایه
علاقه مندی ها (بوک مارک ها)