structure در متلب
در جلسه بیستم از آموزش متلب رایگان هوسم، میخواهیم structure در متلب را معرفی کنیم. structure-ها نیز مانند سلول یک data type در متلب هستند. یک structure از مجموعهای از field-ها تشکیل شده است. این فیلدها میتوانند دادههایی از انواع مختلف را در خود ذخیره کنند. در این جلسه میخواهیم نحوه تعریف structure، اضافه یا حذف کردن اطلاعات به structure و اندیسدهی به آن را آموزش دهیم. با هوسم همراه باشید.
معرفی آرایه ساختاری در متلب
آرایه ساختاری در متلب (structure array)، یک نوعِ داده (data type) است که میتوان دادهها را به صورت گروهی در آن ذخیره کرد. هر گروه از دادهها، در کانتینرهایی (container) با نام مشخص ذخیره میشوند. به هر کدام از این کانتینرها یک Field گفته میشود. درون یک فیلد میتوان هر نوع دادهای ذخیره کرد و این دادهها میتوانند از نوع متفاوتی باشند.
شکل بالا یک بیان عامیانه از structure در متلب است. در این شکل شما یک بخش از سوپرمارکت را مشاهده میکنید. نام این بخش حراج است. این درواقع همان structure ما است. این بخش به سه قسمت تقسیم شده و بالای هر قسمت عناوین «شیرینی»، «شوینده» و «نوشیدنی» نوشته شده است. اینها درواقع همان فیلدها هستند. داخل هر فیلد، یکسری کالا وجود دارند. این کالاها همان مقادیری هستند که در فیلد ذخیره میشوند! که این کالاها میتوانند انواع متفاوتی داشته باشند. مثلا شیرینیها میتوانند کیک، ویفر یا بیسکوئیت باشند. یعنی از یک نوع نباشند. همچنین تعداد شیرینیها در هر بستهبندی میتواند متفاوت باشد. همین مسئله در مورد نوشیدنیها و مواد شوینده هم وجود دارد.
در اینجا ما به بیان ساده یک آرایه ساختاری را به شما معرفی کردیم. در بخش بعدی با نحوه تعریف یک structure در متلب آشنا خواهید شد. برویم سراغ بخش بعدی..
تعریف structure در متلب
برای تعریف یک structure در متلب دو راه وجود دارد. راه اول، استفاده از نقطه (دات “.”) است. در این روش ابتدا نام آرایه را نوشته و بعد یک دات میگذاریم و نام field را مینویسیم. سپس با استفاده از عملگر تخصیص میتوانیم مقداری را در field موردنظر ذخیره کنیم. روش دوم استفاده از دستور struct در متلب است. به این منظور کافی است که جلوی دستور struct، یک پرانتز باز کرده و نام fieldها و مقادیرشان را به ترتیب بنویسیم. در ادامه، هردو روش، تشریح شدهاند.
استفاده از DOT برای تعریف structure در متلب
در بخش قبل گفتیم که یکی از راههای تعریف آرایه ساختاری در متلب، استفاده از دات است! در این بخش میخواهیم نحوه انجام این کار را بگوییم. تا به حال از دات برای تعریف متغیر استفاده نکرده بودیم که کردیم! ابتدا نیاز است در ذهن خود یک آرایه ساختاری تصور کنید. نام این آرایه را students در نظر بگیرید. شما باید در این متغیر، نامِ یکسری دانشآموز، سن دانشآموزان و نمرههای سه درس آنها را ذخیره کنید.
پس نام آرایه ساختاری، students است. در این structure، سه Field باید وجود داشته باشد. نام دانشآموز، سن و نمرههایش. به ترتیب نام این سه Field را age ،name و grade بگذارید. خب، آرایه ساختاری ما، باید به شکل زیر باشد:
حالا که میدانیم قضیه از چه قرار است و چه میخواهیم بسازیم، دست به کیبورد میشویم و شروع میکنیم به کدنویسی. بنویسید:
>> students.name = 'sara'
در همین یک خط با استفاده از علامت dot، ما یک آرایه ساختاری تعریف کردیم که یک field به نام name دارد. در این فیلد یک مقدار وجود دارد (sara). کد بالا را اجرا کنید و ببینید:
students = struct with fields: name: 'sara'
پس توانستیم Field اول را بسازیم و یک مقدار هم در آن ذخیره کنیم. برویم فیلدهای دیگر را هم اضافه کنیم:
>> students.age = 15; >> students.grades = [32, 75, 61]; >> students
students = struct with fields: name: 'sara' age: 15 grades: [32 75 61]
مشاهده میکنید که به سادگی و فقط با استفاده از علامت نقطه، توانستیم یک آرایه ساختاری تعریف کرده و در هر فیلد یک مقدار ذخیره کنیم. بسیار هم عالی. خب بقیه مقادیر را چطور باید اضافه کنیم پس؟ برای این کار نیاز است که نحوه اندیسدهی به آرایه ساختاری را بلد باشید. در بخشهای بعدی به شما خواهم گفت که چطور این کار را انجام دهید. فعلا برویم نحوه تعریف آرایه ساختاری با استفاده از دستور struct را ببینیم…
استفاده از دستور struct در متلب
برای تعریف یک آرایه ساختاری در متلب میتوان از دستور struct در متلب نیز استفاده کرد. همانطور که قبلا هم گفتیم برای تعریف ساختار با دستور struct، کافی است که جلوی دستور یک پرانتز باز کنیم و فیلدها و مقادیر متناظرشان را به ترتیب بنویسیم. برای مثال نمراتی که در شکل 2 گذاشتیم را اینبار میخواهیم با استفاده از دستور struct در متغیری به نام students_2 ذخیره کنیم. برای این کار کافی است بنویسید:
>> students_2 = struct('name', 'sara', 'age', 15, 'grades', [32 75 61])
students_2 = struct with fields: name: 'sara' age: 15 grades: [32 75 61]
مشاهده میکنید که به راحتی توانستیم یک آرایه ساختاری با نام students_2 بسازیم. این آرایه مشابه بخش قبل، سه فیلد دارد و ما یک مقدار به هر فیلد اضافه کردیم. ساده بود نه؟ برای اضافه کردن بقیه مقادیر نیز نیاز هست که نحوه اندیسدهی را بدانیم؟ خیر! در این روش اگر بخواهید بیش از یک مقدار به هر فیلد اضافه شود، کافی است از علامت آکولاد استفاده کنید. این بار سعی میکنیم نمرات sara و john را با هم در students_2 وارد کنیم:
>> students_2 = struct('name', {'sara', 'john'}, 'age', {15, 17}, 'grades', {[32 75 61], [80 69 94]})
دستور بالا را اگر اجرا کنید خواهید داشت:
students_2 = 1×2 struct array with fields: name age grades
قبلا مقادیر داخل structure هم نمایش داده میشد. اما این بار چون تعداد مقادیری که ذخیره شده است زیاد شده، فقط فیلدها را نمایش میدهد. برای اینکه مقادیر ذخیره شده را هم ببینید روی students_2 در پنجره Workspace دابل-کلیک کنید:
مشاهده میکنید که مقادیر همانطور که تعریف کردیم در این متغیر ذخیره شدهاند. چرا نمرههای Alex را وارد نکردیم؟ این دیگر کار شماست.
دسترسی به داده های داخل structure در متلب
در آرایهها دیدید که اگر جلوی نام آرایه یک پرانتز باز کرده و اندیسِ داده موردنظرتان را بنویسید، میتوانید به مقدار آن داده دسترسی پیدا کنید. در آرایه ساختاری هم همینطور است. اما علاوهبر نام اندیس، باید نام فیلد را هم مشخص کنیم. مثلا فرض کنید بخواهیم نمره سارا را در students_2، استخراج کنیم. برای این کار کافی است بنویسیم:
>> students_2(1).grades
یعنی اولین المان از فیلد grades را بردار و به من نشان بده:
ans = 32 75 61
حالا از همین تکنیک میتوانیم استفاده کنیم و یکسری مقادیر جدید به هر فیلد اضافه کنیم.
>> your_var(3).grades
اضافه کردن مقدار به structure با استفاده از اندیس دهی
در بخش « استفاده از DOT برای تعریف structure در متلب » گفتیم که برای اضافه کردن مقدار به یک structure نیاز است که با اندیسدهی آشنا باشید. حالا که اندیسدهی را آموختید میخواهیم برگردیم و آن بخش را کامل کنیم. برای اضافه کردن یک مقدار جدید به یک فیلد، کافی است از اندیسدهی استفاده کنیم. اگر یادتان باشد ما در متغیر students، فقط اطلاعات Sara را وارد کردیم. حالا میخواهیم نمرات John را نیز وارد کنیم. برای این کار کافی است بنویسید:
>> students(2).name = 'john'
بعد از اجرای کد بالا، متغیر students را از پنجره Workspace باز کنید:
مشاهده میکنید که نام John به فیلد names اضافه شده است. نکته دیگری توجهتان را جلب نکرد؟ اگر دقت کنید میبینید که به صورت اتوماتیک در اندیس دوم و فیلدهای age و grades مقدار [ ] قرار داده شده است. یعنی اندیسِ 2 برای فیلدهای age و grades به صورت اتوماتیک ایجاد شده و مقدارش تهی است! یعنی این خانهها صاحب دارند ولی صاحبخانه فعلا خانه نیست! مشاهده میکنید که ابعاد structure هم برابر با 2×1 شده است. به همین ترتیب میتوانیم سن و نمرات John را نیز یکی یکی وارد کنید:
>> students(2).age = 17 >> students(2).grades = [80 69 94]
دوباره به Workspace سر بزنید و ببینید که اطلاعات John هم کامل شده است. حالا اگر بدانیم که حذف دادهها چطور هست دیگر معرکه میشود. برویم سراغ بخش بعدی…
حذف field از آرایه های ساختاری در متلب
برای حذف کامل یک فیلد از آرایه ساختاری در متلب، از دستور rmfield استفاده میشود. این عبارت مخفف عبارت remove field است. برای حذف یک فیلد کافی است نام متغیر و نام فیلد موردنظر را به دستور rmfield بدهید. مثلا اگر بخواهیم فیلد age را از متغیر students پاک کنیم، کافی است بنویسیم:
>> rmfield(students, 'age')
ans = 1×2 struct array with fields: name grades
مشاهده میکنید که فیلد موردنظرمان حذف شده است.
>> rmfield(your_var, 'grades')
دسترسی به کل مقادیر یک field در structure
برای دسترسی به کل مقادیر یک فیلد کافی است از dot استفاده کنید. مثلا اگر بخواهیم تمامی مقادیر ذخیره شده در فیلد name از متغیر students را استخراج کنیم، کافی است بنویسید:
>> students.name
ans = 'sara' ans = 'john'
مشاهده میکنید که تمامی عناصر موجود در فیلد names را توانستیم با یک علامت dot استخراج کنیم!
>> your_var.age
دریافت PDF جلسه structure در متلب
برای دریافت pdf این جلسه، لطفا ایمیل خود را در باکس زیر وارد کرده و روی دکمه «دریافت pdf» کلیک کنید.
جمعبندی جلسه structure در متلب
در این جلسه با نوع جدیدی از آرایهها، یعنی آرایه ساختاری در متلب، آشنا شدیم. گفتیم یک آرایه ساختاری یک data-type در متلب است که از المانهایی به نام Field تشکیل شده است. در هرکدام از این فیلدها میتوان متغیرهایی با Data-type مختلف ذخیره کرد. این جلسه هم به پایان رسید. نظرتان در مورد این جلسه چیست؟ برایمان کامنت کنید…
مطالب زیر را حتما مطالعه کنید
تعریف متغیر در متلب
آموزش متلب رایگان
دستور max در متلب
دستور محاسبه انتگرال در متلب
دستور input در متلب
دستور ezplot در متلب
9 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام
من structure تمرين رو ساختم ولي وقتي با rmfield فيلد Grades رو پاک ميکنم> بعدش که توي workspace روش دبل کليک ميکنم، هنوز فيلد grades رو داره
چرا اينجوري ميشه؟
سلام
خداقوت میگم به نویسنده(نویسندگان) این آموزش بسیار مفید.
چون خودم محتوا تولید کرده ام، می دانم که برای تهیه و تنظیم مطالب هر کدام از این جلسات، چقدر زحمت کشیده شده است.
امیدوارم همیشه پرتوان و با انگیزه و سلامت باشید.
خداوند بزرگ نگهدارتان
سلام حمید عزیز،
ممنون از پیام پرمهرتون 🌹😊
خیلی عالی بودممنون از لطفتان
من میخواهم چند تا دستور و یا تابع را که نوشتم در قالب یک برنامه بنویسم چطوری این m فایلها را ترکیب کنم؟
لطفا راهنمایی بفرمایید
سپاس 🙏🌹
میخواید از چند تابع در یک m-file استفاده کنید؟
سلام. خیلی جالب بود. در یادگیری بهم کمک کرده. سپاس گزارم.
سلام
سپاس
موفق باشید
سلام .واقعااز مطالبی که گذاشتین تشکر میکنم .خیلی سلیس و قابل فهم بود.برای یک مبتدی عالی هست
سلام
سپاس 🌹🙏