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

التكرار عبر Hashes

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

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

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، تعمل مع التجزئات أيضًا. ما عليك سوى استلام زوج مفتاح/قيمة (أو مصفوفة مكوّنة من عنصرين) في كل تكرار:

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

التحدي

متوسط

أنت تطبّق تخفيضًا على قائمة أسعار. الهاش prices مُعطى (رمز العنصر => عدد صحيح يمثّل السعر).

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

اطبع بالترتيب التالي:

  1. سطرًا واحدًا لكل عنصر بالتنسيق <item>: $<final_price>، حيث يكون السعر النهائي هو القيمة بعد التخفيض عندما يكون العنصر موجودًا في قائمة التخفيض، أو القيمة الأصلية بخلاف ذلك. استخدم التكرار بواسطة each. حافظ على الترتيب الأصلي للعناصر. استخدم القسمة الصحيحة للتخفيض (price / 2).
  2. Was: $<n>: المجموع الأصلي (استخدم values.sum)
  3. Now: $<n>: المجموع بعد التخفيض
  4. أسماء العناصر التي لا يزال سعرها final النهائي أعلى من 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 عبر الإنترنت