الثلاثاء، 14 أكتوبر 2014

C# - Arrays

C# - Arrays

Arrays هي مجموعة collection مخازن/متغيرات Variables تدعى elements  ذات حجم ثابت ومجموعة متتابعة من elements من نفس النوع DataType . وتستخدم الـ Arrays لتخزين مجموعة من البيانات.

بدلا من التصريح عن المتغيرات، مثل number0، number1، و ...، وnumber99، نقوم بتعريف متغير Array مثل

أرقام [0]، وأرقام [1]، و ...، وأرقام [99] لتمثيل المتغيرات. يتم الوصول لعنصر  elementمعين في array عن طريق الفهرس Index.




تعريف مصفوفة Declaring Arrays:
لتعريف array داخل C# يمكن استخدام الشكل التالي:
datatype[] arrayName;

  • datatype تستخدم لتحديد نوع العنصر لتخزينه داخل الـ array.
  • [ ] لتعريف ان المتغير من نوع Array وتستخدم لتحديد الـ Rank وهو لتحديد أبعاد المصفوفة.
  • arrayName لنحديد اسم المصفوفة.


مثال,
double[] balance;


تهيئة المصفوفة Initializing

الاعلان عن مصفوفة لا يعني تهيئتها في الذاكرة, عندما تتم تهيئة متغير مصفوفة يمكنك تحديد القيم إلى المصفوفة.
المصفوفة array  هي من النوع reference type لذلك تحتاج إلى استخدام الكلمة new لإنشاء مثيل لل array.
مثال,
double[] balance = new double[10];


تعيين القيم إلى Assigning Values to an Array
يمكنك تعيين قيم لعناصر المصفوفة Array باستخدام الرقم Index، مثل:
double[] balance = new double[10];
balance[0] = 9300.0;


يمكنك تعيين قيم لـ array في وقت الإعلان، مثل:
double[] balance = { 2340.0, 4523.69, 3421.0 };


يمكنك أيضا إنشاء وتهيئة المصفوفة Array، مثل:
int[] marks = new int[5] { 99, 98, 92, 97, 95 };

في الحالة التالية، يمكنك أيضا حذف حجم size المصفوفة، مثل:
int[] marks = new int[] { 99, 98, 92, 97, 95 };

يمكنك أيضا نسخ متغير مصفوفة  arrayإلى متغير array آخر. في هذه الحالة، فإن كلا من الهدف والمصدر يشير إلى نفس موقع الذاكرة:
int[] degrees = new int[] { 60, 71, 80, 55, 16 };
int[] trgt = degrees;

عند إنشاء مصفوفة C# array  سوف يقوم مترجم اللغة C# compiler  بتهيئة كل عنصر في المصفوفة إلى قيمة افتراضية اعتمادا على نوع الـ array. على سبيل المثال سيكون لـ int array  قيمة أفتراضية صفر.

الوصول إلى عناصر المصفوفة

تم الوصول إلى العنصر باسم المصفوفة و بالفهرس Index. ويتم ذلك  عن طريق وضع فهرس العنصر بين قوسين مربع بعد اسم من الصفيف. على سبيل المثال:
double salary = balance[9];
مثال شامل, إنشاء برنامج ConsoleApplication:
using System;

namespace ArrayApplication
{
    class MyArrayClass
    {
        static void Main(string[] args)
        {
            int[] n = new int[10]; /* n is an array of 10 integers */
            int i, j;

            for (i = 0; i < 10; i++)
            {
                n[i] = i + 100;
            }

            for (j = 0; j < 10; j++)
            {
                Console.WriteLine("Element[{0}] = {1}", j, n[j]);
            }
        }
    }
}

نتيجة:
Element[0] = 100
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109
استخدام foreach Loop
using System;

namespace ArrayApplication
{
    class MyArray
    {
        static void Main(string[] args)
        {
            int[] arr = new int[10];

            arr[0] = 15;
            arr[1] = 32;
            arr[2] = 16;
            arr[3] = 7;
            arr[4] = 99;
            arr[5] = 152;
            arr[6] = 356;
            arr[7] = 80;
            arr[8] = 23;
            arr[9] = 5;

            int i = 0;

            foreach (int Item in arr)
            {
                Console.WriteLine("Element[{0}] {1}",i, Item);
                i++;
            }
        }
    }
}
نتيجة:




تفاصيل المصفوفات في C#

المصفوفات مهمة في C# ,تحتاج الكثير من التفاصيل. هناك بعض المفاهيم التالية هامة التي تتعلق بالـ Array  والتي ينبغي أن تكون واضحة لمبرمج C#.

المفهوم
Concept
الوصف
Description
المصفوف متعدد الأبعاد
C# يدعم المصفوفات متعددة الأبعاد. أبسط شكل من المصفوفة متعددة الأبعاد هي ثنائية الأبعاد.
المصفوفات المسننه 
Jagged arrays
مصفوفات من مصفوفات
تمرير Array إلى دوال functions
Passing arrays to functions
يمكنك تمرير المصفوفة  إلى الدالة عن طريق تحديد اسم المصفوفة دون فهرس index.
Param arrays
ويستخدم هذا لتمرير عدد غير معروف من المعلمات إلى دالة function.
Array Class
المصفوفة داخل System namespace, هو الكلاس الاساسي لكل المصفوفات وهو يوفر مختلف خصائص properties  وأساليب العمل methods  مع المصفوفات.


هناك 5 تعليقات:

  1. ممكن برنامج يقوم بترتيب عناصر المصفوفة تصاعديا بحيث كل عنصر فيها اكبر من مجموع العناصر السابقة له

    ردحذف
    الردود
    1. class Program
      {
      static void Main()
      {
      int[] values = { 4, 7, 2, 0 };
      Array.Sort(values);
      foreach (int value in values)
      {
      Console.Write(value);
      Console.Write(' ');
      }
      Console.WriteLine();
      }
      }

      حذف
  2. كيفيه عمل مصفوفه ترتيب عناصرها تصاعديا و تنازليا باستخدام for
    &foreach

    ردحذف
    الردود
    1. char[] array = { 'z', 'a', 'b' };
      Array.Sort(array);
      foreach (var c in array)
      Console.WriteLine(c);

      حذف
  3. عاوز ادخل عناصر مصفوفة 2d وبعدين يتم تغيير العنصر الاول بالاخير
    والثاني بقبل الاخير وهكذا

    ردحذف

يسعدني إرسال تعليقاتكم وأسئلتكم واقتراحاتكم