الأنماط الشائعة في المصفوفات ثنائية الأبعاد
جزء من قسم المنطق وتدفق العمليات في رحلة 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, 9Transpose: لغة Ruby تحتوي على هذه الميزة بشكل مدمج. تصبح الصفوف أعمدة والعكس صحيح:
matrix.transpose
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]معرفة هذه الأسماء توفر عليك عناء إعادة كتابة نفس الحلقات المتداخلة.
التحدي
سهلالمصفوفة المربعة matrix معطاة (n × n). اطبع ثلاثة أسطر، جميعها مشتقة من الأنماط الموجودة في النظرية:
Anti-diagonal sum: <n>، وهو مجموع الخلايا حيثr + c == matrix.length - 1Column sums: [...]، وهو مجموع كل عمود. تلميح: قم بإجراء عملية التبديل (transpose) أولاً، ثم قم بتحويل (map) كل صف إلى مجموعه، ثم استخدمinspectSymmetric: 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: مجموع القطر الثانوي، مجموع الأعمدة عبر المنقول، التحقق من التماثل
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق العمليات
1السلاسل النصية بعمق
نظرة عامة على دوال السلاسل النصيةتضمين النصوص (String Interpolation)التكرار عبر السلاسل النصيةالتقسيم والربط (Split و Join)مراجعة - نساج النصوص4Blocks و Procs و Lambdas
ما هو الـ Block؟do..end مقابل الأقواس { }الكلمة المفتاحية yieldمعاملات الـ BlockProcs و Lambdasمراجعة - Custom Iterator مخصص7Hashes - الجزء الثاني
Hash.new مع القيم الافتراضيةالتكرار عبر الـ Hashesالـ Hashes المتداخلةالدمج والتحويلمراجعة - عداد التكرار10مشروع - سجلات الطلاب
نظرة عامة على المشروعإضافة طالب5قوة الـ Enumerable
Select و Rejectتسلسل MapReduce / Injectcount، all?، any?، none?group_by و partitionsort_by، min_by، max_byمراجعة - Data Pipeline3المصفوفات ثنائية الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفات ثنائية الأبعادالتكرار عبر المصفوفات ثنائية الأبعادالأنماط الشائعة في المصفوفات ثنائية الأبعادمراجعة - عمليات المصفوفات