در این مقاله، به بررسی نحوه تعریف، مقداردهی و دسترسی به عناصر آرایه دندانه دار در سی شارپ «#Jagged Array in C» پرداخته خواهد شد. همچنین ترکیب این نوع آرایهها با آرایههای چندبعدی و کاربردهای مختلف آنها در برنامهنویسی بررسی میشود. این مفاهیم به ویژه در مواقعی که دادهها ساختار نامتقارن دارند، به کار میآیند و میتوانند به طور چشمگیری کارایی و انعطافپذیری کد را افزایش دهند.
مقدمه
آرایههای دندانه دار در زبانهای برنامهنویسی مانند #C ابزاری قدرتمند برای ذخیرهسازی دادههای چندبعدی با اندازههای متغیر هستند. برخلاف آرایههای چندبعدی معمولی، در آرایههای Jagged هر سطر میتواند تعداد متفاوتی از عناصر داشته باشد. این ویژگی به برنامهنویسان این امکان را میدهد که دادههایی با ساختار متغیر و انعطافپذیر را ذخیره و مدیریت کنند.
آرایهی دندانهدار یک آرایه از آرایهها است بهطوریکه آرایههای عضو میتوانند اندازههای مختلفی داشته باشند. به عبارت دیگر، طول هر ایندکس آرایه میتواند متفاوت باشد. عناصر آرایه دندانهدار از نوع مرجع هستند و بهطور پیشفرض مقدارشان null است. آرایه دندانهدار همچنین میتواند با آرایههای چندبعدی ترکیب شود. در اینجا، تعداد سطرها در زمان اعلان ثابت خواهد بود، اما میتوان تعداد ستونها را تغییر داد.
تعریف آرایه دندانه دار در سی شارپ
در آرایههای دندانهدار، کاربر فقط باید تعداد سطرها را مشخص کند. اگر کاربر تعداد ستونها را نیز مشخص کند، این آرایه دیگر Jagged Array نخواهد بود. این نوع آرایهها به ما اجازه میدهند که یک ساختار داده نامتقارن را تعریف کنیم. ساختار زیر، برای تعریف آرایه دندانه دار در سی شارپ استفاده میشود.
ساختار syntax
data_type[][] name_of_array = new data_type[rows][]
اجزای این ساختار:
- data_type نوع دادهای عناصر آرایه را مشخص میکند (مثلاً int، string، double، و غیره).
- [][] نشاندهنده این است که این آرایه از نوع دندانهدار است (آرایهای از آرایهها).
- name_of_array نامی است که به آرایه دندانهدار اختصاص داده میشود.
- new data_type[rows][] این بخش، آرایه اصلی (آرایه بیرونی) را مقداردهی اولیه میکند.
- rows تعداد آرایههای داخلی (طول آرایه اصلی) را مشخص میکند.
- در این مرحله، طول آرایههای داخلی هنوز مشخص نشده است و بهصورت جداگانه مقداردهی میشوند.
مثال
int[][] jagged_arr = new int[4][]
در مثال بالا، یک آرایه تکبعدی تعریف شده است که ۴ عنصر (سطر) دارد و هر یک از این عناصر یک آرایه تکبعدی از اعداد صحیح است.
مقداردهی اولیه آرایه دندانه دار در سی شارپ
عناصر آرایه دندانه دار در سی شارپ باید قبل از استفاده مقداردهی شوند. میتوان هر عنصر آرایه را بهطور جداگانه مقداردهی کرد. روشهای مختلفی برای مقداردهی عناصر آرایه Jagged وجود دارد.
مثال ۱: تعیین اندازه هر عنصر آرایه بهصورت جداگانه. در مثال زیر هر یک از عناصر یک آرایه تکبعدی از اعداد صحیح است که:
سطر یا عنصر اول یک آرایه شامل ۲ عدد صحیح است.
سطر یا عنصر دوم یک آرایه شامل ۴ عدد صحیح است.
سطر یا عنصر سوم یک آرایه شامل ۶ عدد صحیح است.
سطر یا عنصر چهارم یک آرایه شامل ۷ عدد صحیح است.
jagged_arr[0] = new int[2]; jagged_arr[1] = new int[4]; jagged_arr[2] = new int[6]; jagged_arr[3] = new int[7];
مثال ۲: زمانی که اندازه آرایه موردنیاز نباشد، عناصر آن میتوانند مستقیماً با مقادیر زیر مقداردهی شوند:
jagged_arr[0] = new int[] {1, 2, 3, 4}; jagged_arr[1] = new int[] {11, 34, 67}; jagged_arr[2] = new int[] {89, 23}; jagged_arr[3] = new int[] {0, 45, 78, 53, 99};
اعلان و مقداردهی اولیه آرایه دندانه دار در سی شارپ
آرایه دندانه دار در سی شارپ آرایهای از آرایهها است که آرایههای داخلی میتوانند طولهای متفاوتی داشته باشند.
در ادامه به انواع روشهای مختلف اعلان و مقداردهی اولیه آرایه دندانهدار با استفاده از مثالها میپردازیم.
مثال ۱:
استفاده از روش مستقیم: تکه کد زیر یک آرایه دندانهدار را با استفاده از مقداردهی اولیه مستقیم ایجاد میکند. این آرایه دندانهدار دارای ۴ آرایه داخلی است که طولهای متفاوتی دارند. از این کد میتوان برای ذخیرهسازی دادههای نامتقارن استفاده کرد.
int[][] jagged_arr = new int[][] { new int[] {1, 2, 3, 4}, new int[] {11, 34, 67}, new int[] {89, 23}, new int[] {0, 45, 78, 53, 99} };
مثال ۲: استفاده از روش کوتاهنویسی. هیچ مقدار پیشفرضی برای عناصر وجود ندارد، بنابراین کاربر نمیتواند عملگر new را در مقداردهی عناصر حذف کند.
int[][] jagged_arr = { new int[] {1, 2, 3, 4}, new int[] {11, 34, 67}, new int[] {89, 23}, new int[] {0, 45, 78, 53, 99} };
دسترسی به عناصر آرایه دندانه دار در سی شارپ
برای دسترسی به عناصر آرایه دندانه دار در سی شارپ، کاربر باید سطر و ستون را همراه با نام آرایه مشخص کند.
مثال
// Accessing & Assigning 99 to the third element ([2]) of the second array ([1]) jagged_arr[1][2] = 99; // Accessing & Assigning 47 to the first element ([0]) of the fourth array ([3]): jagged_arr[3][0] = 47;
برنامه: قطعه کد زیر، یک برنامه سیشارپ است که اعلان و مقداردهی اولیه آرایههای دندانهدار را نشان میدهد و سپس تمام عناصر آن را چاپ میکند. در این برنامه، یک آرایه دندانهدار با ۴ عنصر تعریف شده که هر یک از این عناصر خود یک آرایه یکبعدی با اندازههای مختلف است.
// C# program to illustrate the declaration // and Initialization of Jagged Arrays using System; class PStore { // Main Method public static void Main() { // Declare the Jagged Array of four elements: int[][] jagged_arr = new int[4][]; // Initialize the elements jagged_arr[0] = new int[] { 1, 2, 3, 4 }; jagged_arr[1] = new int[] { 11, 34, 67 }; jagged_arr[2] = new int[] { 89, 23 }; jagged_arr[3] = new int[] { 0, 45, 78, 53, 99 }; // Display the array elements: for (int n = 0; n < jagged_arr.Length; n++) { // Print the row number System.Console.Write("Row({0}): ", n); for (int k = 0; k < jagged_arr[n].Length; k++) { // Print the elements in the row System.Console.Write("{0} ", jagged_arr[n][k]); } System.Console.WriteLine(); } } }
خروجی برنامه به صورت زیر خواهد بود:
Row(0): 1 2 3 4 Row(1): 11 34 67 Row(2): 89 23 Row(3): 0 45 78 53 99
توضیح: در برنامه بالا، آرایه دندانهدار به درستی تعریف و مقداردهی میشود. سپس با استفاده از حلقهها، تمام دادههای ذخیره شده در آرایه دندانهدار به صورت مرتب چاپ میشوند. این روش یکی از راههای استفاده از آرایههای دندانهدار در سیشارپ است که در آن اندازه هر آرایه داخلی میتواند متفاوت باشد.
ترکیب آرایه های دندانه دار با آرایه های چندبعدی در سی شارپ
ممکن است آرایههای Jagged و آرایههای چندبعدی با هم ترکیب شوند. ترکیب آرایههای دندانهدار و آرایههای چندبعدی در سیشارپ میتواند ساختارهای پیچیدهای از دادهها را ایجاد کند که در آن هر بعد از آرایه شامل آرایههای داخلی با اندازههای مختلف باشد. این ترکیب انعطافپذیری بالایی را فراهم میآورد و میتواند در موارد خاصی که دادهها نیاز به ساختار غیر یکنواخت دارند مفید باشد.
در مثال زیر اعلان و مقداردهی یک آرایه تکبعدی Jagged که شامل چهار عنصر آرایه دوبعدی با اندازههای متفاوت است، آورده شده است.
مثال
int[][, ] jagged_arr1 = new int[4][, ] { new int[, ] { {1, 3}, {5, 7} }, new int[, ] { {0, 2}, {4, 6}, {8, 10} }, new int[, ] { {7, 8}, {3, 1}, {0, 6} }, new int[, ] { {11, 22}, {99, 88}, {0, 9} } };
یک کاربر میتواند به عناصر فردی دسترسی پیدا کند، همانطور که در مثال زیر نشان داده شده است، که مقدار عنصر [۲، ۰] از آرایه دوم را نمایش میدهد (یعنی مقدار آن ۸ است).
مثال
System.Console.Write("{0}", jagged_arr1[1][2, 0]);
برنامه: قطعه کد زیر یک برنامه سیشارپ است که ترکیب آرایههای دندانهدار «Jagged Arrays» و آرایههای دو بعدی «۲-D Arrays» را نشان میدهد. این برنامه یک آرایه دندانهدار از آرایههای دو بعدی را تعریف کرده و سپس تمامی عناصر این آرایههای دندانهدار را چاپ میکند.
// C# program to illustrate the Mixing of 1-D // Jagged Array with the four 2-D array using System; namespace ProgramStore { class PStore { // Main Method public static void Main() { // Declaration and Initialization of // Jagged array with 4 2-D arrays int[][, ] jagged_arr1 = new int[4][, ] { new int[, ] { { 1, 3 }, { 5, 7 } }, new int[, ] { { 0, 2 }, { 4, 6 }, { 8, 10 } }, new int[, ] { { 7, 8 }, { 3, 1 }, { 0, 6 } }, new int[, ] { { 11, 22 }, { 99, 88 }, { 0, 9 } } }; // Display the array elements: // Length method returns the number of // arrays contained in the jagged array for (int i = 0; i < jagged_arr1.Length; i++) { int x = 0; // GetLength method takes integer x which // specifies the dimension of the array for (int j = 0; j < jagged_arr1[i].GetLength(x); j++) { // Rank is used to determine the total // dimensions of an array for (int k = 0; k < jagged_arr1[j].Rank; k++) Console.Write("Jagged_Array[" + i + "][" + j + ", " + k + "]: " + jagged_arr1[i][j, k] + " "); Console.WriteLine(); } x++; Console.WriteLine(); } } } }
خروجی این برنامه تمام عناصر آرایههای دندانهدار که خود آرایههای دو بعدی هستند را نمایش میدهد. ساختار خروجی به شکل زیر خواهد بود:
Jagged_Array[0][0, 0]: 1 Jagged_Array[0][0, 1]: 3 Jagged_Array[0][1, 0]: 5 Jagged_Array[0][1, 1]: 7 Jagged_Array[1][0, 0]: 0 Jagged_Array[1][0, 1]: 2 Jagged_Array[1][1, 0]: 4 Jagged_Array[1][1, 1]: 6 Jagged_Array[1][2, 0]: 8 Jagged_Array[1][2, 1]: 10 Jagged_Array[2][0, 0]: 7 Jagged_Array[2][0, 1]: 8 Jagged_Array[2][1, 0]: 3 Jagged_Array[2][1, 1]: 1 Jagged_Array[2][2, 0]: 0 Jagged_Array[2][2, 1]: 6 Jagged_Array[3][0, 0]: 11 Jagged_Array[3][0, 1]: 22 Jagged_Array[3][1, 0]: 99 Jagged_Array[3][1, 1]: 88 Jagged_Array[3][2, 0]: 0 Jagged_Array[3][2, 1]: 9
کاربرد ترکیب آرایههای دندانهدار و چندبعدی:
این ترکیب میتواند در مواردی که دادهها به صورت ماتریسهای غیرمنظم (که هر سطر یا ستون اندازه متفاوتی دارد) یا مجموعهای از دادهها با ساختار پیچیده ذخیرهسازی نیاز دارند، بسیار مفید باشد.
مثلاً در صورتی که دادههایی از نوع ماتریسهایی با ابعاد متفاوت (ماتریسهایی که هر سطر یا ستون طول متفاوتی دارد) داشته باشید، میتوانید از این ترکیب استفاده کنید.
نتیجهگیری
آرایههای Jagged ابزار قدرتمند و انعطافپذیری هستند که در زبانهای برنامهنویسی مانند #C به طور گستردهای برای مدیریت دادههای چندبعدی با اندازههای متغیر مورد استفاده قرار میگیرند. با استفاده از این نوع آرایهها، میتوان دادههایی با ساختار نامتقارن را به راحتی ذخیره و دسترسی پیدا کرد. علاوه بر این، ترکیب آرایه دندانه دار در سی شارپ با آرایههای چندبعدی امکان ایجاد ساختارهای داده پیچیدهتر را فراهم میآورد. درک و تسلط بر نحوه تعریف، مقداردهی و دسترسی به این آرایهها، به برنامهنویسان این امکان را میدهد که کدهایی بهینه و منعطف بنویسند که قابلیت مقیاسپذیری بالایی داشته باشند. در نهایت، آرایههای Jagged به عنوان یک ابزار موثر در مدیریت دادههای پیچیده و نامتقارن در بسیاری از سناریوهای برنامهنویسی کاربرد دارند.