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

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

جزء من قسم المنطق وتدفق العمليات في رحلة 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

هذا الأسلوب أقصر وأكثر أماناً من تتبع الفهارس يدوياً، حيث لا يوجد خطر من تجاوز نهاية الصف.

challenge icon

التحدي

سهل

تم توفير المصفوفة ثنائية الأبعاد 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 متداخل، طباعة الخلايا > متوسط الصف
quiz iconاختبر نفسك

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

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