أساسيات البرمجةالمصفوفات الثلاثية
- مفهوم المصفوفات المتعددة الأبعاد
- تعريف مصفوفة ثلاثية الأبعاد
- عرض قيم المصفوفة الثلاثية الأبعاد
- تغيير قيم عناصر المصفوفة الثلاثية الأبعاد
- حساب إجمالي عدد عناصر المصفوفة الثلاثية الأبعاد
- التعامل مع المصفوفة المتعددة الأبعاد بواسطة حلقات
مفهوم المصفوفات المتعددة الأبعاد
المصفوفة المتعددة الأبعاد ( Multi-Dimensional Array ) هي المصفوفة التي تتألف من ثلاثة أبعاد أو أكثر. هذا النوع من المصفوفات لا يستخدم في العادة لأنه يعتبر معقّد جداً.
في هذا الدرس سنشرح كيف يمكن الوصول لعناصر المصفوفة المتعددات الأبعاد، إعطاءها قيم، بالإضافة لكيفية عرض قيمها. و بالطبع لن نتعمق بها أكثر من اللازم بل بالقدر الكافي الذي يجعلك قادر على التعامل مع المصفوفات المتعددة الأبعاد.
تعريف مصفوفة ثلاثية الأبعاد
هناك طريقتين أساسيتين لتعريف المصفوفات:
- تعريف المصفوفة مع تحديد عدد العقد الأولى، ثم عدد العقد التالية في كل عقدة منهم، ثم عدد العناصر المراد تخزينها في كل عقدة منهم و هذا الأمر يمكنك فعله بواسطة الدالة
array()
. - تعريف المصفوفة و تمرير القيم التي تريد تخزينها في كل عقدة فيها بشكل مباشر.
إنشاء مصفوفة ثلاثية بواسطة الدالة array()
لإنشاء مصفوفة ثلاثية بواسطة الدالة array()
يجب أن تحدد عدد العقد الموجودة في البعد الأول، و عدد العقد الموجودة في البعد الثاني، وعدد العقد الموجودة في البعد الثالث و التي بدورها تمثل العناصر التي يمكنك وضع قيم فيها، و كذلك يجب أن تضعها في متغير لكي تستطيع التعامل معها لاحقاً.
مثال
var a = array(2, 2, 3);
إذاً المصفوفة a
تحتوي في البعد الأول على عقدتين، في البعد الثاني كذلك يوجد عقدتين في كل عقدة سابقة، في البعد الثالث يوجد 3 عناصر في كل عقد سابقة كالتالي.
إنشاء مصفوفة ثلاثية الأبعاد و إعطاءها قيم أولية
يمكنك إنشاء مصفوفة ثلاثية و تمرير قيم لها بواسطة الرمز []
نفسه الذي تستخدمه لإنشاء مصفوفات أحادية.
مثال
يمكنك تعريفها كالتالي ليكون التعامل معها سهل عليك.
var a = [ [ [1, 2, 3], [4, 5, 6] ], [ [7, 8, 9], [10, 11, 12] ] ];
و يمكنك تعريف المصفوفة كلها على سطر واحد و لكننا لا ننصحك بذلك لأن التعامل معها سيكون صعب عليك.
var a = [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]];
إذاً المصفوفة a
تحتوي في البعد الأول على عقدتين، في البعد الثاني كذلك يوجد عقدتين في كل عقدة سابقة، في البعد الثالث يوجد 3 عناصر في كل عقد سابقة كالتالي.
قاعدة مهمة
محتوى المصفوفة يجب أن يوضع بداخل []
و كل بُعد في المصفوفة يجب أن يوضع بداخل []
و يجب وضع فاصلة بين العُقد و القيم الموجودة في ذات البُعد كما رأينا في المثال السابق.
عرض قيم المصفوفة الثلاثية الأبعاد
لعرض جميع القيم التي تحتويها المصفوفة بشكل سهل في محرر هرمش، يمكنك تمرير إسم المصفوفة للدالة write()
و هي ستعرض لك قيمها.
مثال
var a = [ [ [1, 2, 3], [4, 5, 6] ], [ [7, 8, 9], [10, 11, 12] ] ]; write(a);
سنحصل على النتيجة التالية عند التشغيل.
في حال كان العنصر فارغ، بمعنى أنه لا يوجد فيه أي قيمة و حاولت طباعة قيمته سيظهر لك أن قيمته undefined
للإشارة إلى أنه بالأساس لا يحتوي أي شيء.
في المثال التالي قمنا بتعريف مصفوفة تحتوي عُقدتين و كل عُقدة من العُقدتين تحتوي عُقدتين وكل عُقدة منهما فيها ثلاث خانات و لم نضع أي قيم فيها.
بعدها قمنا بعرض جميع قيم العناصر الموجودة فيها حتى تلاحظ أنه سيظهر لك undefined
عند محاولة طباعة قيمة أي عنصر لا يملك أساساً أي قيمة.
مثال
var a = array(2, 2, 3); write(a);
سنحصل على النتيجة التالية عند التشغيل.
عرض قيمة عنصر محدد
لعرض قيمة عنصر محدد في المصفوفة عليك تحديد رقم كل العقد الموجود فيها إلى أن تصل إليه. فعلى سبيل المثال إن كانت المصفوفة إسمها a
و تريد عرض قيمة العنصر الموجود في البُعد الأول، ثم في البُعد الثاني، ثم في العنصر الثاني، فجيب أن تكتب a[0][1][1]
للوصول إليه كما في الصورة التالية.
فيما يلي قمنا بطباعة قيم كل العناصر الموجودة في المصفوفة.
مثال
var a = [ [ [1, 2, 3], [4, 5, 6] ], [ [7, 8, 9], [10, 11, 12] ] ]; // هنا قمنا بعرض عناصر المجموعة الأولى write("a[0][0][0] = " + a[0][0][0] + "\n"); write("a[0][0][1] = " + a[0][0][1] + "\n"); write("a[0][0][2] = " + a[0][0][2] + "\n"); // هنا قمنا بعرض عناصر المجموعة الثانية write("a[0][1][0] = " + a[0][1][0] + "\n"); write("a[0][1][1] = " + a[0][1][1] + "\n"); write("a[0][1][2] = " + a[0][1][2] + "\n"); // هنا قمنا بعرض عناصر المجموعة الثالثة write("a[1][0][0] = " + a[1][0][0] + "\n"); write("a[1][0][1] = " + a[1][0][1] + "\n"); write("a[1][0][2] = " + a[1][0][2] + "\n"); // هنا قمنا بعرض عناصر المجموعة الرابعة write("a[1][1][0] = " + a[1][1][0] + "\n"); write("a[1][1][1] = " + a[1][1][1] + "\n"); write("a[1][1][2] = " + a[1][1][2]);
سنحصل على النتيجة التالية عند التشغيل.
a[0][0][1] = 2
a[0][0][2] = 3
a[0][1][0] = 4
a[0][1][1] = 5
a[0][1][2] = 6
a[1][0][0] = 7
a[1][0][1] = 8
a[1][0][2] = 9
a[1][1][0] = 10
a[1][1][1] = 11
a[1][1][2] = 12
عرض كل القيم الموجودة في البعد الأخير
في محرر هرمش يمكنك عرض كل القيم الموجود في البعد الأخير من خلال تحديد أرقام الأبعاد السابقة.
مثال
var a = [ [ [1, 2, 3], [4, 5, 6] ], [ [7, 8, 9], [10, 11, 12] ] ]; // هنا قمنا بعرض عناصر المجموعة الأولى في البعد الأخير write("a[0][0] = " + a[0][0] + "\n"); // هنا قمنا بعرض عناصر المجموعة الثانية في البعد الأخير write("a[0][1] = " + a[0][1] + "\n"); // هنا قمنا بعرض عناصر المجموعة الثالثة في البعد الأخير write("a[1][0] = " + a[1][0] + "\n"); // هنا قمنا بعرض عناصر المجموعة الرابعة في البعد الأخير write("a[1][1] = " + a[1][1]);
سنحصل على النتيجة التالية عند التشغيل.
a[0][1] = [4, 5, 6]
a[1][0] = [7, 8, 9]
a[1][1] = [10, 11, 12]
تغيير قيم عناصر المصفوفة الثلاثية الأبعاد
يمكنك تغيير قيمة أي عنصر في المصفوفة من خلال رقم الفهرس الخاص به و الذي يتكون من رقم السطر و الخانة الموجود فيهما كالتالي.
مثال
var a = array(2, 2, 3); write("Before a = " + a); a[0][0][0] = 1; a[0][0][1] = 2; a[0][0][2] = 3; a[0][1][0] = 4; a[0][1][1] = 5; a[0][1][2] = 6; a[1][0][0] = 7; a[1][0][1] = 8; a[1][0][2] = 9; a[1][1][0] = 10; a[1][1][1] = 11; a[1][1][2] = 12; write("\nAfter a = " + a);
سنحصل على النتيجة التالية عند التشغيل.
After a = [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]
حساب إجمالي عدد عناصر المصفوفة الثلاثية الأبعاد
يمكنك حساب إجمالي عدد عناصر المصفوفة الموجودة في البعد الأخير بعدة طرق و أبسطها ضرب عدد جميع الأبعاد ببعضها.
مثال
var a = array(2, 2, 3); var elementsCount = a.length * a[0].length * a[0][0].length; write("Total number of elements = " + elementsCount);
سنحصل على النتيجة التالية عند التشغيل.
التعامل مع المصفوفة المتعددة الأبعاد بواسطة حلقات
إذا أردت المرور على جميع عناصر المصفوفة سواء لإدخال قيم فيها أو للحصول على قيمها فعليك استخدام مجموعة حلقات متداخلة، كل حلقة لأجل بُعد في المصفوفة.
نريد منك أن تلاحظ فقط كيف أننا اعتمدنا على:
- قيمة
a.length
لجعل الحلقةi
تبدأ من0
و تتوقف عند آخر عقدة في البُعد الأول. - قيمة
a[i].length
لجعل الحلقةj
تبدأ من0
و تتوقف عند آخر كل عقدة في البُعد الثاني. - قيمة
a[i][j].length
لجعل الحلقةk
تبدأ من0
و تتوقف عند آخر عنصر في البُعد الثالث.
مثال
var a = [ [ [1, 2, 3], [4, 5, 6] ], [ [7, 8, 9], [10, 11, 12] ] ]; for (var i=0; i<a.length; i++) { for (var j=0; j<a[i].length; j++) { for (var k=0; k<a[i][j].length; k++) { write(a[i][j][k] + " "); } } }
سنحصل على النتيجة التالية عند التشغيل.
شرح الكود
الفيديو التالي يشرح طريقة عمل الكود خطوة خطوة.