تخزين البيانات.

لنفترض أنك طورت لعبة كمبيوتر تسمى "User Hostile" يتنافس فيها اللاعبون ضد معقدة وغير ودية واجهة الكمبيوتر. أنت الآن بحاجة إلى كتابة برنامج يتتبع المبيعات الشهرية لهذه اللعبة على مدار فترة خمس سنوات. أو لنفترض أنك بحاجة إلى جرد بطاقات تداول Hacker Hero.
ستصل قريبًا إلى استنتاج مفاده أنك بحاجة إلى أكثر من أنواع البيانات الأساسية البسيطة لتخزين المعلومات ومعالجتها.

نبسب ؛

المصفوفات. مقدمة.

لتسهيل العمل مع كميات كبيرة من البيانات ، يتم إعطاء مجموعة من الخلايا عنصرًا مشتركًا اسم. تسمى هذه المجموعة من الخلايا بالمصفوفة .
Array & ndash؛ إنها مجموعة من خلايا الذاكرة من نفس النوع ، وتقع جنبًا إلى جنب ولها اسم شائع. كل خلية في المجموعة لها رقم فريد.

هناك ثلاثة أشياء تحتاج إلى تعلمها عند التعامل مع المصفوفات:
x تخصيص ذاكرة بالحجم المطلوب للمصفوفة ؛
x كتابة البيانات إلى الخلية المطلوبة ؛
x قراءة البيانات من الخلية.

إنشاء مصفوفة.

عند إنشاء مصفوفة ، يتم تخصيص مساحة في الذاكرة (عدد معين من الخلايا). <قبل> 1) يمكن إنشاء المصفوفات عن طريق تعداد العناصر ببساطة: <قبل> int [] nums = < code> new int [] {1، 2، 3، 5}؛ int تعني أن جميع الكائنات في المصفوفة هي أعداد صحيحة . بدلاً من int يمكن أن يكون هناك أي نوع بيانات آخر. على سبيل المثال، string [] names = [& quot؛ Vasya & quot ؛، & quot؛ Peter & quot ؛، & quot؛ Fedya & quot؛]؛ 2) لا يمكننا تحديد قيم المصفوفة على الفور ، ولكن ببساطة إنشاء مصفوفة من الطول الذي نحتاجه. int [] nums = جديد int [4]؛ 3) المصفوفة دائمًا "تعرف" حجمك. يمكن العثور على حجم المصفوفة a كما يلي:
أ.الطول ؛
غالبًا ما يتم تخزين حجم المصفوفة في متغير منفصل بحيث يمكن تغيير البرنامج بسهولة للعمل مع حجم مصفوفة مختلف. مثال:
<قبل> int N = 10؛ // تخزين حجم المصفوفة في المتغير N int [] nums = new int [4] ؛ // إنشاء مجموعة من الحجم N. Console.Write (عدد. الطول) ؛ // عرض حجم المصفوفة يمكن تعيين حجم المصفوفة من لوحة المفاتيح.

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

تأتي معظم فائدة المصفوفات من حقيقة أنه يمكن الوصول إلى عناصرها بشكل فردي.
طريقة القيام بذلك هي استخدام فهرس لترقيم العناصر.
الفهرس هي قيمة تشير إلى عنصر مصفوفة معين.

تذكر : & nbsp؛ يبدأ ترقيم مصفوفة C # من الصفر.

أمثلة على الوصول إلى المصفوفة A :
<قبل> int x = (A [3] + 5) * A [1] / / قراءة القيم A [3] و A [1] A [0] = x + 6 // اكتب قيمة جديدة إلى A [0] دعنا نحلل البرنامج للعمل مع عناصر المصفوفة. <قبل> int i = 1؛ int [] A = new int [5] ؛ // أنشئ مصفوفة من 5 عناصر أ [0] = 23 ؛ // لكل عنصر من عناصر المصفوفة الخمسة (الفهارس من 0 إلى 4) أ [1] = 12 ؛ // اكتب قيمة محددة أ [2] = 7 ؛ أ [3] = 43 ؛ أ [4] = 51 ؛ A [2] = A [i] + 2 * A [i-1] + A [2 * i] ؛ // قم بتغيير قيمة العنصر باستخدام الفهرس 2 إلى نتيجة التعبير // لأن i = 1 ، ثم نستبدل قيمة المتغير i في التعبير الذي نحصل عليه // التعبير التالي A [2] = A [1] + 2 * A [0] + A [2] ؛ Console.Write ((A [2] + A [4])) ؛ نتيجة لتنفيذ هذا البرنامج ، فإن قيمة مجموع عناصر المصفوفة باستخدام سيظهر الفهرس 2 والفهرس 4 على الشاشة ، يساوي 116. كما ترى من المثال ، يمكننا الوصول إلى أي عنصر من المصفوفة. وأيضًا احسب رقم العنصر المطلوب باستخدام صيغ مختلفة (على سبيل المثال ، كما في البرنامج A [i-1] أو A [2 * i] ، في هذه الحالات ، سيتم حساب مؤشرات العناصر وتعتمد على قيمة i ).

دعنا نحلل نموذجًا لبرنامج.
<قبل> int N = 5؛ int [] A = new int [N] ؛ كثافة العمليات س = 1 ؛ أ [س + 4] = أ [س] + أ [2 * (س + 1)] ؛ على & nbsp؛ // بعد استبدال x في التعبيرات والحسابات & nbsp؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ // احصل على السطر التالي أ [5] = أ [1] + أ [4] نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ // A [5] لا يوجد مثل هذا العنصر نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ نبسب ؛ // خطأ - مجموعة خارج الحدود يتم الإعلان عن المصفوفة بخمسة عناصر ، مما يعني أنه سيتم ترقيم العناصر من 0 إلى 4. نرى أن البرنامج في السطر السادس يشير إلى عنصر غير موجود: A [5] .
اتضح أن البرنامج تجاوز حدود المصفوفة.
تجاوز المصفوفة هو الوصول إلى عنصر في فهرس غير موجود في المصفوفة.
في مثل هذه الحالات ، يتعطل البرنامج عادةً مع خطأ وقت التشغيل .

نبسب ؛

عند العمل مع المصفوفات ، يتعين عليك عادةً العمل مع جميع عناصر المصفوفة مرة واحدة.
التكرار على العناصر: نحن ننظر من خلال جميع عناصر المصفوفة ، وإذا لزم الأمر ، نقوم ببعض العمليات مع كل عنصر منها.
لهذا ، غالبًا ما يتم استخدام حلقة بها متغير ، والتي تتغير من 0 إلى N-1 ، حيث N & nbsp؛ هو الرقم من عناصر المصفوفة.
ضمن N سننظر في الحجم الحالي للصفيف ، وهو
N = A.Length؛
<قبل> ... لـ (int i = 0 ؛ i & lt ؛ N ؛ i ++) { // هنا نعمل مع A [i] } في الحلقة المحددة ، سيأخذ المتغير i القيم 0، 1، 2، ...، N-1 . & nbsp؛ وهكذا ، في كل خطوة من الحلقة ، نصل إلى عنصر محدد من المصفوفة بالرقم i .
أي أنه يكفي وصف ما يجب القيام به مع عنصر واحد من عناصر مجموعة A [i] ووضع هذه الإجراءات داخل هذه الحلقة.

لنكتب برنامجًا يملأ المصفوفة بأعداد طبيعية N & nbsp؛ الأولى ، أي في نهاية البرنامج ، يجب أن تصبح عناصر المصفوفة متساوية
<قبل> A [0] = 1 أ [1] = 2 أ [2] = 3 ... أ [N - 1] = N من السهل رؤية النمط: يجب أن تكون قيمة عنصر المصفوفة أكبر بمقدار 1 من فهرس العنصر
ستبدو الحلقة هكذا
<قبل> لـ (int i = 0؛ i & lt؛ N؛ i ++) {A [ ط] = أنا + 1 ؛ }

طرق إضافية للعمل مع عناصر المصفوفة باستثناء لـ ، يمكنك أيضًا استخدام foreach - يتكرر عبر جميع عناصر المصفوفة ، بدون استخدام الفهارس. في بعض الأحيان قد يكون من الملائم ، على سبيل المثال ، عرض مصفوفة على الشاشة. & nbsp؛ foreach (int i in A) { Console.Write (i + & quot؛ & quot؛) ؛ }
وبهذه الطريقة يمكنك قراءة مصفوفة ، عناصرها مكتوبة في سطر واحد ومفصولة بمسافة ، من لوحة المفاتيح. باستخدام System.Linq ؛ // تحتاج إلى كتابة هذا التوجيه لاستخدام الوظائف المتعلقة بالعمل مع المصفوفات ... string text = Console.ReadLine () ، int [] array = text.Split (& # 39 ؛ & # 39 ؛). حدد (int.Parse) .ToArray () ؛ // Split () يقسم السلسلة إلى كائنات منفصلة (في هذه الحالة ، تقسيم الفضاء) // Select (int.Parse) يحول كل كائن (سلسلة) إلى عدد صحيح // ToArray () يكتب جميع الكائنات المستلمة إلى المصفوفة