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

چاپ

برای ایجاد یک ساختار(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 می تواند هرنوع داده ای باشد.مثلا می تواند به صورت عددی، یا منطقی یا کاراکتر یا آرایه باشد.

مثال

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

s = 

  1×2 struct array with fields:

    f

>> s(1).f

ans =

a

>> s(2).f

ans =

b

 


 عبارت 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


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


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


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