مقدمه ای بر سی شارپ : قسمت دهم
Jagged arrays
Jagged arrays آرایه ای از آرایه ها است و همانطور که ذکر شد لزومی ندارد که هر ردیف آن با ردیف بعدی هم طول باشد . هنگام تعریف این نوع آرایه شما تعداد ردیف ها را مشخص می نمایید. هر ردیف یک آرایه را نگهداری می کند. در اینجا هر آرایه باید تعریف شود. روش تعریف Jagged array به صورت زیر است:
type [] []...
در اینجا تعداد براکت ها بیانگر ابعاد آرایه می باشد. برای مثال آرایه ی زیر دو بعدی است :
int [] [] myJaggedArray;
و برای مثال برای دسترسی به پنجمین عنصر آرایه ی سوم به صورت زیر عمل می شود :
myJaggedArray[2][4]
مثال : یک برنامه ی سی شارپ جدید console را در VS.NET باز کنید و نام آنرا درابتدا ex21 انتخاب نمایید. سپس کد زیر را درون آن بنویسید :
using System;
namespace ex21
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
const int rows = 4;
// declare the jagged array as 4 rows high
int[][] jaggedArray = new int[rows][];
// the first row has 5 elements
jaggedArray[0] = new int[5];
// a row with 2 elements
jaggedArray[1] = new int[2];
// a row with 3 elements
jaggedArray[2] = new int[3];
// the last row has 5 elements
jaggedArray[3] = new int[5];
// Fill some (but not all) elements of the rows
jaggedArray[0][3] = 15;
jaggedArray[1][1] = 12;
jaggedArray[2][1] = 9;
jaggedArray[2][2] = 99;
jaggedArray[3][0] = 10;
jaggedArray[3][1] = 11;
jaggedArray[3][2] = 12;
jaggedArray[3][3] = 13;
jaggedArray[3][4] = 14;
for (int i = 0;i < 5; i++)
{
Console.WriteLine("jaggedArray[0][{0}] = {1}",
i,jaggedArray[0][i]);
}
for (int i = 0;i < 2; i++)
{
Console.WriteLine("jaggedArray[1][{0}] = {1}",
i,jaggedArray[1][i]);
}
for (int i = 0;i < 3; i++)
{
Console.WriteLine("jaggedArray[2][{0}] = {1}",
i,jaggedArray[2][i]);
}
for (int i = 0;i < 5; i++)
{
Console.WriteLine("jaggedArray[3][{0}] = {1}",
i,jaggedArray[3][i]);
}
Console.ReadLine();
}
}
}
توضیحاتی در مورد کد فوق :
هنگام کار با آرایه های rectangular برای درسترسی به اعضا به صورت زیر عمل می شد :
rectangularArrayrectangularArray[i,j]
اما در اینجا بدین صورت است :
jaggedArray[3][i]
استفاده از System.Array :
دات نت فریم ورک کلاسی را معرفی کرده است به نام Array. توسط این کلاس کار با آرایه ها و اعمال روی آنها برای مثال سورت کردن و غیره به شدت ساده می شود .
مثال : یک برنامه ی سی شارپ جدید console را در VS.NET باز کنید و نام آنرا درابتدا ex22 انتخاب نمایید. سپس کد زیر را درون آن بنویسید :
using System;
namespace ex22
{
class Class1
{
public static void PrintMyArray(object[] theArray)
{
foreach (object obj in theArray)
{
Console.WriteLine("Value: {0}", obj);
}
Console.WriteLine("n");
}
[STAThread]
static void Main(string[] args)
{
String[] myArray = {
"Who", "is", "John", "Galt"
};
PrintMyArray(myArray);
Array.Reverse(myArray);
PrintMyArray(myArray);
String[] myOtherArray = {
"We", "Hold", "These", "Truths",
"To", "Be", "Self", "Evident" };
PrintMyArray(myOtherArray);
Array.Sort(myOtherArray);
PrintMyArray(myOtherArray);
Console.ReadLine() ;
}
}
}
توضیحاتی در مورد کد فوق :
از دو متد Sort و Reverse در اینجا برای سورت کردن و نمایش آرایه به ترتیب معکوس (از انتها به ابتدا) استفاده گردیده است.
تعریف آرایه های دینامیک در سی شارپ :
یکی از مشکلاتی که با آرایه های معمول وجود دارد این است که قبل از هر کاری باید طول آْنها را مشخص کرد. گاهی از اوقات ما دقیقا نمی دانیم برنامه چه تعداد عضو را دریافت می کند تا آرایه ای از پیش تعریف شده با همان تعداد عضو ایجاد کنیم. برای حل این مشکل از کلاس ArrayList تعریف شده در دات نت فریم ورک می توان استفاده کرد.
هنگام استفاده از ArrayList نیازی به دانستن تعداد اعضایی که باید اضافه شوند نمی باشد و با استفاده از متد Add آن به سادگی می توان اعضاء را به آن اضافه نمود . تعدادی از خواص و متدهای این کلاس به صورت زیر هستند :
Adapter , FixedSize , ReadOnly , Repeat , Synchronized , Capacity,Count , IsFixedSize , IsReadOnly , IsSynchronized , Item , SyncRoot , Add , AddRange , BinarySearch , Clear , Clone , Contains , CopyTo , GetEnumerator , GetRange , IndexOf , Insert , InsertRange , LastIndexOf , Remove , RemoveAt , RemoveRange , Reverse , SetRange , Sort , ToArray , TrimToSize
مثال : یک برنامه ی سی شارپ جدید console را در VS.NET باز کنید و نام آنرا درابتدا ex23 انتخاب نمایید. سپس کد زیر را درون آن بنویسید :
using System;
using System.Collections;
namespace ex23
{
// a simple class to store in the array
public class Employee
{
public Employee(int empID)
{
this.empID = empID;
}
public override string ToString( )
{
return empID.ToString( );
}
public int EmpID
{
get
{
return empID;
}
set
{
empID = value;
}
}
private int empID;
}
class Class1
{
[STAThread]
static void Main(string[] args)
{
ArrayList empArray = new ArrayList( );
ArrayList intArray = new ArrayList( );
// populate the array
for (int i = 0;i<5;i++)
{
empArray.Add(new Employee(i+100));
intArray.Add(i*5);
}
// print all the contents
for (int i = 0;i
{
Console.Write("{0} ", intArray[i].ToString( ));
}
Console.WriteLine("n");
// print all the contents of the button array
for (int i = 0;i
{
Console.Write("{0} ", empArray[i].ToString( ));
}
Console.WriteLine("n");
Console.WriteLine("empArray.Capacity: {0}",
empArray.Capacity);
Console.ReadLine();
}
}
}
توضیحاتی در مورد کد فوق :
1- با کلمه ی کلیدی override در قسمت های بعدی آشنا خواهیم شد.
2- برای استفاده از ArrayList لازم بود تا فضای نامی را که این کلاس در آن تعریف شده است ، به برنامه اضافه کرد.
3- در مثال فوق نحوه ی تعریف دو کلاس را در یک فضای نام مشاهده می نمایید.
4- نحوه ی تعریف و مقدار دهی ArrayList و همچنین استفاده از خواص آن در مثال فوق بررسی شده است.