Array ها در سی شارپ
بدون دیدگاه
در حال حاضر خالی است: ۰ ﷼
آرایه ها در سی شارپ یکی از متداول ترین ساختارهای داده میباشد. وقتی می خواهید بیش از یک مقدار از نوعی مشخص را در حافظه نگدارید، میتوانید از آرایه استفاده کنید. در این صورت با یک نام میتوانید به تمامی مقادیر دسترسی داشته باشد. آرایه ها در سی شارپ دنباله ای از مقادیر همنوع میباشند. این مقادیر فضاهای متوالی حافظه را به خود اختصاص میدهند. تعداد عناصر موجود در آرایه حین نمونه سازی مشخص میشوند. اندازه آرایه پس از نمونه سازی ثابت بوده و قابل تغییر نمیباشد. دسترسی به عناصر آرایه از طریق Index امکانپذیر میباشد. Index در سی شارپ Zero Based است و از صفر شروع میشود. روش تعریف آرایه به شکل زیر است.
int [ ] numbers;
numbers = new int [ ۶ ];
//or
numbers = new int [ ] { ۱, -۲, ۴۳, ۰, ۳۳, ۱۹ };
دسترسی به عناصر آرایه با استفاده از Index به شکل زیر انجام میشود.
numbers [ 0 ] = 10;
numbers [ 1 ] = -5;
برای درک بهتر ایندکس و اینکه چرا zero based است، به این مثال توجه کنید. فرض کنید آرایه ای با ۶ عنصر از نوع int در حافظه تعریف کرده ایم. مشخص است که هر سلول از آرایه، از آدرس مشخصی شروع میشود. و باز هم واضح است که نام آرایه، به کل فضای اشغال شده اشاره میکند. عملا نام آرایه، مشخص کننده نقطه شروع آرایه در حافظه است. به تصویر زیر توجه کنید:
حال برای دسترسی به سلول های آرایه، باید آدرس شروع هریک را در اختیار داشته باشیم. جدول زیر مشخص کننده شماره سلول و آدرس شروع آن میباشد.
شماره سلول آرایه | آدرس شروع در حافظه |
۱ | numbers |
۲ | numbers + sizeof ( int ) |
۳ | numbers + ( 2 * sizeof ( int ) ) |
۴ | numbers + ( 3 * sizeof ( int ) ) |
۵ | numbers + ( 4 * sizeof ( int ) ) |
۶ | numbers + ( 5 * sizeof ( int ) ) |
همین جدول را کمی اصلاح میکنیم، تا به قالبی مشخص در آدرس های شروع در حافظه برسیم
شماره سلول آرایه | آدرس شروع در حافظه |
۱ | numbers + ( ۰ * sizeof ( int ) ) |
۲ | numbers + ( ۱ * sizeof ( int ) ) |
۳ | numbers + ( ۲ * sizeof ( int ) ) |
۴ | numbers + ( ۳ * sizeof ( int ) ) |
۵ | numbers + ( ۴ * sizeof ( int ) ) |
۶ | numbers + ( ۵ * sizeof ( int ) ) |
مقادیر ۰ تا ۵ index های مورد نظر هستند. و دلیل zero based بودن index ها با این مثال به سادگی قابل درک است.
این آرایه ها دارای یک بعد بوده و توالی یک سری مقادیر در حافظه هستند. دسترسی به عناصر آنها از طریق یک index انجام می شود. میتوانید برای نمونه سازی آرایه از کلمه کلیدی new استفاده کرده و یا با استفاده از initializer با مقادیر مورد نظر آرایه را initialize کنید. به مثال زیر توجه کنید:
int [ ] numbers;
numbers = new int [ ۶ ];
//or
numbers = new int [ ] { ۱, -۲, ۴۳, ۰, ۳۳, ۱۹ };
numbers [ 0 ] = 10;
numbers [ 1 ] = -5;
این آرایه ها مانند آرایه های یک بعدی هستند با این تفاوت که حداقل بعد دوم به آنها اضافه شده است. به عنوان مثال آرایه های دو بعدی را میتوانید مانند ماتریس در نظر بگیرید. تصور کنید که هر سلول از طریق شماره سطر و ستون قابل دسترس باشد. همین حالت برای آرایه های دوبعدی قابل تصور است.
int [ , ] numbers;
numbers = new int [ ۴ , ۶ ];
//or
numbers = new int [ ]
{
{۱, -۲, ۴۳, ۰, ۳۳, ۱۹ }, // numbers [ 0 , * ] elements
{-۳, ۰, ۱۱, ۹, ۲۰, ۸۷ }, // numbers [ 1 , * ] elements
{۰, ۱, ۰, -۱, ۲, ۵ }, // numbers [ 2 , * ] elements
{۴۸, ۹۴, ۱۵۰۰, -۱, ۰, ۸۵ } // numbers [ 3 , * ] elements
};
numbers [ 0 , 0 ] = 580;
numbers [ 1 , 4 ] = -90;
به همین ترتیب آرایه ها میتوانند دارای ابعاد بیشتری باشند. آرایه های سه بعدی را میتوانید مکعب هایی در نظر بگیرید که در آنها با استفاده از سطر، ستون و ارتفاع به سلول ها دسترسی دارید. برای ابعاد بالاتر، تجسم ذهنی ساده به نظر نمیرسد. ولی قاعده کلی تعریف و دسترسی به مقادیر همچنان قابل تعمیم است. به تصویر زیر توجه کنید:
این نوع از آرایه ها، آرایه هایی هستند که عناصرشان، خود آرایه هستند. از آنجا که هر آرایه میتواند اندازه ی خاص خودش را داشته باشد، این آرایه ها ساختاری نامنظم میتوانند داشته باشند. به اصطلاح این آرایه ها شکلی دندانه دندانه خواهند داشت. به این نوع از آریه ها، آرایه ای از آرایه ها نیز میگویند.
int[ ] [ ] userInputs = new int [ ۳ ] [ ];
userInputs [ 0 ] = new int [ ۲ ];
userInputs [ 1 ] = new int [ ۵ ];
userInputs [ 2 ] = new int [ ۳ ];
//or
userInputs = new int [ ] [ ]
{
new int [ ] {۲, ۳۲},
new int [ ] {۱, ۰, ۱۸, ۶, ۸۵},
new int [ ] {۶, ۲۵, ۵۹},
};