التكرار عبر المصفوفات ثنائية الأبعاد
جزء من قسم المنطق وتدفق العمليات في رحلة 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جرّب بنفسك
grid = [
[1, 8, 3],
[4, 5, 9],
[6, 7, 2]
]
# TODO: each_with_index متداخل، طباعة الخلايا > متوسط الصف
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق العمليات
1السلاسل النصية بعمق
نظرة عامة على أساليب السلاسل النصيةاستيفاء السلاسل النصيةالتكرار عبر السلاسل النصيةالتقسيم والضممراجعة - ناسج السلاسل النصية4Blocks، Procs و Lambdas
ما هي الكتلة؟do..end مقابل الأقواس المعقوفةالكلمة المفتاحية yieldمعاملات الكتلةProcs و Lambdasمراجعة - مكرّر مخصّص7Hashes - الجزء الثاني
Hash.new مع القيم الافتراضيةالتكرار عبر HashesHashes متداخلةالدمج والتحويلمراجعة - عدّاد التكرار10مشروع - سجلات الطلاب
نظرة عامة على المشروعإضافة طالب5قوة Enumerable
Select و Rejectتسلسل MapReduce / Injectcount، all?، any?، none?group_by و partitionsort_by، min_by، max_byمراجعة - خط أنابيب البيانات3المصفوفات ثنائية الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفات ثنائية الأبعادالتكرار عبر المصفوفات ثنائية الأبعادالأنماط الشائعة للمصفوفات ثنائية الأبعادمراجعة - عمليات المصفوفات6المشروع - مدير المكتبة
نظرة عامة على المشروعإضافة كتابتدرّب بنفسك: مترجم Ruby عبر الإنترنت