تعلم البرمجة للمبتدئين المصفوفات الثلاثية

مفهوم المصفوفات المتعددة الأبعاد

المصفوفة المتعددة الأبعاد ( 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);
        

سنحصل على النتيجة التالية عند التشغيل.

[[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]

جرب الكود


تذكر

في حال كان العنصر فارغ، بمعنى أنه لا يوجد فيه أي قيمة و حاولت طباعة قيمته سيظهر لك أن قيمته undefined للإشارة إلى أنه بالأساس لا يحتوي أي شيء.


في المثال التالي قمنا بتعريف مصفوفة تحتوي سطرين و كل سطر فيه ثلاث خانات و لم نضع أي قيم فيها.
بعدها قمنا بعرض جميع قيم العناصر الموجودة فيها حتى تلاحظ أنه سيظهر لك undefined عند محاولة طباعة قيمة أي عنصر لا يملك أساساً أي قيمة.

مثال

var a = array(2, 2, 3);

write(a);
        

سنحصل على النتيجة التالية عند التشغيل.

[[[undefined, undefined, undefined], [undefined, undefined, undefined]], [[undefined, undefined, undefined], [undefined, undefined, undefined]]]

جرب الكود


عرض قيمة عنصر محدد

لعرض قيمة عنصر محدد في المصفوفة عليك تحديد رقم كل العقد الموجود فيها إلى أن تصل إليه. فعلى سبيل المثال إن كانت المصفوفة إسمها 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][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

جرب الكود


عرض كل القيم الموجودة في البعد الأخير

في محرر هرمش يمكنك عرض كل القيم الموجود في البعد الأخير من خلال تحديد أرقام الأبعاد السابقة.

مثال

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][0] = [1, 2, 3]
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);
        

سنحصل على النتيجة التالية عند التشغيل.

Before a = [[[undefined, undefined, undefined], [undefined, undefined, undefined]], [[undefined, undefined, undefined], [undefined, undefined, undefined]]]
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);
        

سنحصل على النتيجة التالية عند التشغيل.

Total number of elements = 12

جرب الكود

التعامل مع المصفوفة المتعددات الأبعاد بواسطة حلقات

إذا أردت المرور على جميع عناصر المصفوفة سواء لإدخال قيم فيها أو للحصول على قيمها فعليك استخدام مجموعة حلقات متداخلة، كل حلقة لأجل بُعد في المصفوفة.

نريد منك أن تلاحظ فقط كيف أننا اعتمدنا على:

  • قيمة 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] + "   ");
        }
        
        write("\n");
    }
}
        

سنحصل على النتيجة التالية عند التشغيل.

1   2   3  
4   5   6  
7   8   9  
10   11   12  

جرب الكود


شرح الكود

الفيديو التالي يشرح طريقة عمل الكود خطوة خطوة.

قريباً سيتم إضافة فيديو يشرح طريقة عمل الكود السابق بدقة.

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة