Module 6 Arrays
تعریف یک متغییر آرایه ای :
: مثال type[
]name; // Allowed type name[ ]; // Disallowed in C# type[4] name; // Also disallowed in C#
مشخص نمودن ابعاد آرایه :
مقدار دهی اولیه آرایه به صورت صریح:
دسترسی به المانهای آرایه :
تذکر :اندیس گذاری آرایه ها از عدد ص فر شروع می شوند.
Property :GetLength
Lengthو
متد
در #Cعبارت های دسترسی به عناصر یک آرایه به صورت خودکار آزمایش می شوند .در صورتی که یک انجام دهد عبارت بخواه د دس ترسی خارج Range نوع از استثنائی ت حال یک IndexOutOfRangeExceptionخواهیم داشت. Length Propertyطول ی ک آرایه را بدون در نظر گرفتن تعداد بعد های آرایه مشخص می نماید. مت د GetLengthشماره بع د را ب ه عنوان پارامتر پذیرفته ،و طول آن بعد را مشخص می نماید.
: مثال for (int r = 0; r < grid.GetLength(0); r++) { for (int c = 0; c < grid.GetLength(1); c++) { Console.WriteLine(grid[r,c]); } }
ایجاد یک نمونه ( )Instanceاز آرایه :
آرایه ها از نوع Refrence Typeمی باشند. از آنجای ی ک ه آرای ه ها از نوع Refrence Typeهس تند ب ه هنگام معرف ی ایجاد نمی شون د و بای د توس ط کلمه کلیدی Newایجاد شوند. به هنگام ایجاد یک آرایه باید طول تمام بعدهای آنرا مشخص نمود.
مثال long[
] row = new long[ ]; // Not allowed int[,] grid = new int[,]; // Not allowed long[ ] row = new long[4];
مقدار دهی اولیه آرایه ها به صورت ضمنی: به هنگام ایجاد یک آرایه مقادیر المانهای آرایه به صورت ضمنی به یک مقدار مشخص مقدار دهی اولیه می شوند .در صورتی که آرایه از نوع عددی باشد المانهای آن به مقدار صفر و در ص ورتی ک ه آرای ه از نوع Booleanباشد مقدار المانها falseخواهد بود.
مقدار دهی اولیه به صورت :صریح :چند مثال
int[ ] data = new int[4]{a, b( ), c*d, e( ) +f( )};
int[ ] data1 = new int[4]{0, 1, 2, 3}; // Allowed int[ ] data2 = {0, 1, 2, 3}; // Allowed data2 = new int[4]{0, 1, 2, 3}; // Allowed data2 = {0, 1, 2, 4}; // Not allowed
int[ ] data3 = allowed int[ ] data4 = not allowed int[ ] data5 = Allowed
new int[2]{}; // Not new int[2]{42}; // Still new int[2]{42,42}; //
به هنگامی که به صورت صریح آرایه ها را مقدار دهی اولیه می کنیم باید تمامی عناصر را مقدار دهی نمود: int[ ] data3 = new int[2]{}; // Not allowed int[ ] data4 = new int[2]{42}; // Still not allowed ;} int[ ] data5 = new int[2]{42,42 // Allowed
مقدار دهی اولیه آرایه های چند :بعدی به صورت صریح
int[,] data = new int[2,3] { // Allowed {42, 42, 42}, {42, 42, 42}, }; int[,] data = new int[2,3] { // Not allowed {42, 42}, {42, 42, 42}, }; int[,] data = new int[2,3] { // Not allowed {42}, {42, 42, 42}, };
نکته : طول آرایه ها را می توان به دو صورت در حین اجراء برنامه و در زمان کامپایل تعیین نمود: تعیین طول آرایه به هنگام کامپایل : ;]long[ ] row = new long[4 تعیین طول آرایه به هنگام اجراء برنامه: ;)(string s = Console.ReadLine ;)int size = int.Parse(s ;]long[ ] row = new long[size
: مثال System.Console.WriteLine("Enter number of rows : "); string s1 = System.Console.ReadLine( ); int rows = int.Parse(s1); System.Console.WriteLine("Enter number of columns: "); string s2 = System.Console.ReadLine( ); int cols = int.Parse(s2); ... int[,] matrix = new int[rows,cols];
: مثال System.Console.WriteLine("Enter number of rows: "); string s1 = System.Console.ReadLine( ); int rows = int.Parse(s1); ... int[,] matrix = new int[rows,4];
یک محدودیت : ب ه هنگام مقدار ده ی اولی ه ب ه آرای ه ه ا نمی توان از عبارات زمان اجراء استفاده نمود. مثال : ;) (string s = System.Console.ReadLine ;)int size = int.Parse(s int[ ] data = new int[size]{0,1,2,3}; // Not allowed
کپی متغییر های آرایه ای:
نکت ه :آرای ه ه ا ب ه ص ورت ضمنی از کلس System.classمشت ق شده اند .بنابراین دارای تعدادی Propertiesو متد هستند.
Array Properties : Rank فقط خواندنی است که ابعاد آرایهInteger یک متغییر .را مشخص می نماید int[ ] one = new int[a]; int[,] two = new int[a,b]; int[,,] three = new int[a,b,c]; : بنابراین one.Rank == 1 two.Rank == 2 three.Rank == 3
Array Properties Length Property ای ن متغیی ر فق ط خواندن ی طول کلی .آرایه را مشخص می نماید : مثال one.Length == a two.Length == a * b three.Length == a * b * c
Sort: متد int[ ] data = {4,6,3,8,9,3}; // Unsorted System.Array.Sort(data); // Now sorted Clone: متد یک نمونه جدید از آرایه ایجاد می نماید که مقادیر المانهای آن همان المانهای آرایه کپی .شده می باشد int[ ] data = {4,6,3,8,9,3}; int[ ] clone = (int [ ])data.Clone( );
IndexOf متد ، اندیس اولین رخداد پارامتر را در آرایه :مشخص می نماید
int[ ] data = {4,6,3,8,9,3}; int where = System.Array.IndexOf(data, 9); // == 4
باز گرداندن آرایه از متدها :
:مثال static int[,] CreateArray( ) { string s1 = System.Console.ReadLine( ); int rows = int.Parse(s1); string s2 = System.Console.ReadLine( ); int cols = int.Parse(s2); return new int[rows,cols]; }
using System; namespace ConsoleApplication1 { class Program { static int[,] CreateArray() { string s1 = System.Console.ReadLine(); int rows = int.Parse(s1); string s2 = System.Console.ReadLine(); int cols = int.Parse(s2); int[,] temp = new int[rows, cols]; temp[1, 1]++; return temp; } static void Main(string[] args) { int[,] temp = CreateArray(); temp[1, 1]++;//print 2 Console.WriteLine(temp[1,1]); Console.ReadKey(); } } }
ارسال آرایه ها به متد ها :
زمانی که یک متغییر آرایه ای را به یک پاس د مت م ی کنی م مقدار متغیی ر آرایه ای در متغیی ر آرای ه ای مت د کپ ی می شود(نمونه جدیدی ساخته نمی شود) .و پارامتر آرایه ای و آرگومان آرایه ای هر دو به یک نمونه اشاره می کنند.
به همراهCommand line برنام ه ای ک ه از :آرگومانهای مشخص شده اجراء میشود
C:\> pkzip –add –rec –path=relative c:\code *.cs
به فرم زیر خواهدPkzip کلس اصلی برنامه :بود class PKZip { static void Main(string[ ] args) { ... } }
به شرح زیرargs آرای ه :بود string[ ] args = { "-add", "-rec", "-path=relative", "c:\\code", "*.cs" };
مقدار خواهد
به همراهForeach اس تفاده از :آرایه ها Foreach عبارت،برای سادگی برنامه نویسی . دو کد زیر هم ارز هستند.استفاده بکار می رود for (int i = 0; i < args.Length; i++) { System.Console.WriteLine(args[i]); } foreach (string arg in args) { System.Console.WriteLine(arg); }
را می توان با آرایه هایforeach عبارت :با ابعاد بالتر نیز بکار برد int[,] numbers = { {0,1,2}, {3,4,5} }; foreach (int number in numbers) { System.Console.WriteLine(number ); }