سبد (0)

استفاده از آرایه سلولی در ساختارها

برای ایجاد یک ساختار(struct) در متلب می توانیم به صورت های زیر عمل کنیم:

مثال

s = struct
s = struct(field,value)
s = struct(field1,value1,...,fieldN,valueN)
s = struct([])
s = struct(obj)

توضیح:

عبارت s = struct یک ساختار اسکالر(یعنی 1 در 1 ) ایجاد می کند که هیچ فیلدی ندارد.


عبارت s = struct(field,value) یک ساختار ایجاد می کند که یک فیلد و یک مقدار دارد. آرگومان value می تواند هرنوع داده ای باشد.مثلا می تواند به صورت عددی، یا منطقی یا کاراکتر یا آرایه باشد.

  •  اگر value یک آرایه ی سلولی نباشد، ساختار s یک مقدار اسکالر(1 در 1 یا یک بعدی) محسوب می شود، به طوری که داریم: s.(field) = value
  • اگر value یک آرایه ی سلولی باشد، s یک نوع ساختار آرایه ای محسوب می شود که ابعاد این آرایه با ابعاد آرایه ی سلولی(value) یکسان است. هر عنصری از s(همان آرایه) که به آن اشاره کنیم، دقیقا به عنصری مشابه از value اشاره می کند.  به عنوان مثال اگر عبارت s = struct('f',{'a','b'}) را در متلب وارد کنیم، خواهیم دید که  s(1).f برابر با a می شود و s(2).f برابر با b می شود. به مثال زیر توجه کنید:

مثال

>> s = struct('f',{'a','b'})

s = 

  1×2 struct array with fields:

    f

>> s(1).f

ans =

a

>> s(2).f

ans =

b

 

  •  اگر value یک آرایه ی سلولی خالی، یعنی {} باشد، آنگاه s یک ساختار خالی(0 در 0) خواهد بود.

 عبارت s = struct(field1,value1,...,fieldN,valueN) یک ساختار آرایه ای ایجاد می کند که چند فیلد دارد. هر مقدار غیر اسکالر(غیر یک بعدی) که در داخل value1 و ... و valueN قرار گیرد، باید ابعاد یکسانی داشته باشد.  این یعنی اگر دو فیلد در متغیری وجود داشته باشد، که هرکدام از آنها حاوی یک آرایه ی سلولی غیر خالی باشند، آنگاه این دو آرایه ی سلولی باید ابعاد یکسانی داشته باشند. به مثال زیر توجه کنید:

مثال

>> x1 = struct('f1',{1,2,3})

x1 = 

  1×3 struct array with fields:

    f1

>> x2 = struct('f1',{1,2,3},'f2',{4,5,6})

x2 = 

  1×3 struct array with fields:

    f1
    f2

>> x3 = struct('f1',{1,2,3},'f2',{4,5,6,7})
Error using struct
Array dimensions of input '4' must match those of input '2', or be scalar.
 
>> 

 تشریح مثال بالا:

در دستورات بالا، در خط شماره 1، یک ساختار ایجاد کردیم و در فیلد f1، یک آرایه ی سلولی با سه مقدار تعریف کردیم. در خط شماره 9، یک ساختار دیگر ایجاد کردیم و علاوه بر فیلد f1، یک فیلد به نام f2 تعریف کردیم و برای آن یک آرایه ی سلولی دیگر با سه مقدار، یعنی با ابعاد یکسان تعریف کردیم. که اینجا هیچ مشکلی به وجود نیامد. اما در خط 18، همان طور که مشاهده می کنید، برای آرایه ی سلولی فیلد f2، یک مقدار اضافی(یعنی عدد 7) را تعریف کرده ایم. این یعنی ابعاد دو آرایه ی سلولی با یکدیگر برابر نیستند و خطا ایجاد شد.


 نکته1: در عبارت s = struct(field1,value1,...,fieldN,valueN) ، اگر هیچ یک از value ها، آرایه ی سلولی نباشند آنگاه ساختار s یک ساختار اسکالر محسوب می شود. و یا اگر تمام valueها آرایه ی سلولی یک بعدی(اسکالر) باشند، آنگاه s نیز یک ساختار اسکالر محسوب می شود.

نکته 2: اگر حداقل یکی از valueها، یک آرایه ی سلولی غیر اسکالر(غیر یک بعدی یا یک عنصری) باشد، آنگاه ابعاد s برابر با ابعاد آن آرایه ی سلولی خواهد بود. به مثال زیر توجه کنید:

مثال

>> x1 = struct('f1',{1,2,3},'f2','m')

x1 = 

  1×3 struct array with fields:

    f1
    f2
  •  همان طور که در خط 5 مشاهده می کنید، ابعاد ساختار، 1 در 3 است، یعنی برابر با ابعاد آرایه ی سلولی.


  • نکته3: اگر یکی از valueها برابر با یک آرایه ی سلولی خالی، یعنی {} باشد، آنگاه s نیز یک ساختار خالی(0 در 0) در نظر گرفته می شود. بنابراین اگر می خواهید در ساختار خود، از یک مقدار خالی برای یک فیلد استفاده کنید، و می خواهید دیگر فیلدها نیز آسیب نبینند، می توانید از یک [] بعنوان مقدار آن فیلد استفاده کنید.

نکته 4: اگر عبارت s = struct([]) را در متلب وارد کنیم، یک ساختار خالی(0در0) بدون هیچ فیلدی ایجاد می شود.


 نکته 5: عبارت s = struct(obj) یک ساختار ایجاد می کند که فیلدها و مقادیر آن با متغیرها(یعنی پروپرتی ها) و مقادیر آنها در شیء obj تطابق دارند و برابر هستند. 


چند مثال در مورد ساختارها در متلب

 

 

 

 

 

 

 

 

 

 

تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه