التكرار عبر المصفوفات ثنائية الأبعاد
جزء من قسم المنطق وتدفق العمليات في رحلة Ruby على Coddy — الدرس 12 من 56.
لزيارة كل خلية في مصفوفة ثنائية الأبعاد، تقوم بدمج تكرارين. تمر الحلقة الخارجية عبر الصفوف، بينما تمر الحلقة الداخلية عبر أعمدة ذلك الصف.
النمط الأكثر شيوعاً (idiomatic) في لغة Ruby يستخدم each مرتين:
grid = [
[1, 2, 3],
[4, 5, 6]
]
grid.each do |row|
row.each do |cell|
puts cell
end
end
# 1, 2, 3, 4, 5, 6 (كل واحد في سطر منفصل)إذا كنت بحاجة أيضاً إلى فهارس الصفوف والأعمدة، على سبيل المثال لتسمية كل خلية، فاستخدم each_with_index على كلا المستويين:
grid.each_with_index do |row, r|
row.each_with_index do |cell, c|
puts "(#{r},#{c}) = #{cell}"
end
endهذا الأسلوب أقصر وأكثر أماناً من تتبع الفهارس يدوياً، حيث لا يوجد خطر من تجاوز نهاية الصف.
التحدي
سهلتم توفير المصفوفة ثنائية الأبعاد grid (3 صفوف × 3 أعمدة من الأعداد الصحيحة).
لكل صف، ابحث عن كل خلية قيمتها أكبر تماماً من متوسط ذلك الصف. اطبع كل خلية من هذا القبيل في سطر خاص بها بالتنسيق التالي:
(r,c) = valueاستخدم each_with_index المتداخلة. احسب المتوسط داخل الحلقة الخارجية بحيث يكون حد كل صف مستقلاً.
بالنسبة للمصفوفة الافتراضية، الخلايا التي تتجاوز متوسط صفها هي:
(0,1) = 8
(1,2) = 9
(2,0) = 6
(2,1) = 7ورقة مرجعية
لتكرار العملية على كل خلية في مصفوفة ثنائية الأبعاد، قم بدمج استدعاءين لـ each بشكل متداخل:
grid.each do |row|
row.each do |cell|
puts cell
end
endللوصول أيضاً إلى فهارس الصفوف والأعمدة، استخدم each_with_index على كلا المستويين:
grid.each_with_index do |row, r|
row.each_with_index do |cell, c|
puts "(#{r},#{c}) = #{cell}"
end
endجرّب بنفسك
grid = [
[1, 8, 3],
[4, 5, 9],
[6, 7, 2]
]
# TODO: each_with_index متداخل، طباعة الخلايا > متوسط الصف
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق العمليات
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المصفوفات ثنائية الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفات ثنائية الأبعادالتكرار عبر المصفوفات ثنائية الأبعادالأنماط الشائعة في المصفوفات ثنائية الأبعادمراجعة - عمليات المصفوفات