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

التكرار عبر الـ Hashes

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

تعد جداول التجزئة (Hashes) قابلة للتعداد (enumerable)، لذا يمكنك التكرار عليها تماماً مثل المصفوفات. هناك ثلاثة أنماط شائعة، اعتماداً على ما تريده.

each تمنحك كلاً من المفتاح والقيمة:

prices = { apple: 1, bread: 3, milk: 4 }
prices.each do |item, price|
  puts "#{item}: $#{price}"
end

each_key يمر عبر المفاتيح فقط:

prices.each_key { |k| puts k }   # apple, bread, milk

each_value يمر على القيم فقط:

prices.each_value { |v| puts v }   # 1, 3, 4

وكل أساليب Enumerable التي رأيتها في الفصل السابق، map و select و reduce: تعمل على الـ hashes أيضاً. ستتلقى ببساطة زوجاً من المفتاح/القيمة (أو مصفوفة من عنصرين) لكل تكرار:

prices.select { |item, price| price > 2 }
# {bread: 3, milk: 4}
challenge icon

التحدي

متوسط

أنت تقوم بتطبيق تخفيضات على قائمة أسعار. الـ hash المسمى prices معطى (رمز العنصر item symbol => سعر صحيح price integer).

اقرأ سطراً واحداً من المدخلات: قائمة مفصولة بفاصلة من العناصر التي سيتم تخفيض سعرها بنسبة 50% (تطابق الرموز الموجودة في الـ hash، حسب الاسم).

اطبع، بهذا الترتيب:

  1. سطر واحد لكل عنصر بتنسيق <item>: <item>: $<final_price>lt;final_price>، حيث يكون السعر النهائي هو القيمة المخفضة عندما يكون العنصر في قائمة التخفيض، أو القيمة الأصلية بخلاف ذلك. استخدم each للتكرار. تحتفظ العناصر بترتيبها الأصلي. استخدم القسمة الصحيحة للتخفيض (price / 2).
  2. Was: Was: $<n>lt;n>: المجموع الأصلي (استخدم values.sum)
  3. Now: Now: $<n>lt;n>: المجموع بعد التخفيض
  4. أسماء العناصر التي لا يزال سعرها النهائي أعلى من 2، مدمجة بـ , (استخدم select + keys على الـ hash الجديد)

للمدخلات bread,milk مع الـ hash الافتراضي، تكون المخرجات:

apple: $1
bread: $1
milk: $2
cheese: $6
Was: $14
Now: $10
cheese

ورقة مرجعية

التكرار عبر الـ hashes باستخدام each، و each_key، و each_value:

prices = { apple: 1, bread: 3, milk: 4 }

prices.each { |item, price| puts "#{item}: $#{price}" }
prices.each_key { |k| puts k }
prices.each_value { |v| puts v }

تعمل دوال Enumerable مثل map، و select، و reduce أيضاً على الـ hashes، حيث تستقبل زوجاً من المفتاح/القيمة (key/value) في كل تكرار:

prices.select { |item, price| price > 2 }
# { bread: 3, milk: 4 }

دوال hash مفيدة: .values.sum لجمع كل القيم، و .keys للحصول على مصفوفة من المفاتيح.

جرّب بنفسك

prices = { apple: 1, bread: 3, milk: 4, cheese: 6 }
discount = gets.chomp.split(",").map(&:to_sym)

# مهام: بناء جدول (hash) السعر النهائي باستخدام each؛ طباعة الأسطر، المجاميع، والعناصر الغالية
quiz iconاختبر نفسك

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

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