Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الأنماط الشائعة في المصفوفات ثنائية الأبعاد

جزء من قسم المنطق وتدفق العمليات في رحلة Ruby على Coddy — الدرس 13 من 56.

تظهر بعض عمليات المصفوفات ثنائية الأبعاد (2D-array) بشكل متكرر لدرجة أنها تستحق التعرف عليها بأسمائها.

جمع كل خلية: قم بتسطيح الشبكة إلى مصفوفة أحادية البعد واستدعِ sum:

grid = [[1, 2], [3, 4]]
puts grid.flatten.sum  # 10

القطر الرئيسي: الخلايا التي يتساوى فيها فهرس الصف مع فهرس العمود (matrix[i][i]):

matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]

(0...matrix.length).each do |i|
  puts matrix[i][i]
end
# 1, 5, 9

Transpose: لغة Ruby تحتوي على هذه الميزة بشكل مدمج. تصبح الصفوف أعمدة والعكس صحيح:

matrix.transpose
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

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

challenge icon

التحدي

سهل

المصفوفة المربعة matrix معطاة (n × n). اطبع ثلاثة أسطر، جميعها مشتقة من الأنماط الموجودة في النظرية:

  1. Anti-diagonal sum: <n>، وهو مجموع الخلايا حيث r + c == matrix.length - 1
  2. Column sums: [...]، وهو مجموع كل عمود. تلميح: قم بإجراء عملية التبديل (transpose) أولاً، ثم قم بتحويل (map) كل صف إلى مجموعه، ثم استخدم inspect
  3. Symmetric: true أو false: هل المصفوفة مساوية لمنقولها (transpose)؟

بالنسبة للمصفوفة الافتراضية، يكون الناتج هو:

Anti-diagonal sum: 15
Column sums: [12, 15, 18]
Symmetric: false

ورقة مرجعية

عمليات المصفوفات ثنائية الأبعاد الشائعة في Ruby:

جمع كل الخلايا — التسطيح ثم الجمع:

grid.flatten.sum

القطر الرئيسي — الخلايا التي يتساوى فيها فهرس الصف مع فهرس العمود (matrix[i][i]):

(0...matrix.length).each { |i| puts matrix[i][i] }
# i == 0: matrix[0][0], i == 1: matrix[1][1], ...

القطر الفرعي (Anti-diagonal) — الخلايا التي يكون فيها r + c == matrix.length - 1:

(0...matrix.length).each { |i| puts matrix[i][matrix.length - 1 - i] }

التبديل (Transpose) — الصفوف تصبح أعمدة:

matrix.transpose
# [[1,4,7],[2,5,8],[3,6,9]]

مجموع الأعمدة — التبديل أولاً، ثم جمع كل صف:

matrix.transpose.map(&:sum)  # [col0_sum, col1_sum, ...]

التحقق من التماثل — مقارنة المصفوفة بتبديلها:

matrix == matrix.transpose  # true or false

جرّب بنفسك

matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]

# TODO: مجموع القطر الثانوي، مجموع الأعمدة عبر المنقول، التحقق من التماثل
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق العمليات