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

التحدي

متوسط

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

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

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

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

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

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

جرّب بنفسك

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

# TODO: ابنِ هاش السعر النهائي عبر each؛ اطبع الأسطر، الإجماليات، العناصر باهظة الثمن
quiz iconاختبر نفسك

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

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

تدرّب بنفسك: مترجم Ruby عبر الإنترنت