التكرار عبر 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, milkeach_value يمرّ عبر القيم فقط:
prices.each_value { |v| puts v } # 1, 3, 4وكل طريقة من طرق Enumerable التي رأيتها في الفصل السابق، map وselect وreduce، تعمل مع التجزئات أيضًا. ما عليك سوى استلام زوج مفتاح/قيمة (أو مصفوفة مكوّنة من عنصرين) في كل تكرار:
prices.select { |item, price| price > 2 }
# {bread: 3, milk: 4}التحدي
متوسطأنت تطبّق تخفيضًا على قائمة أسعار. الهاش prices مُعطى (رمز العنصر => عدد صحيح يمثّل السعر).
اقرأ سطرًا واحدًا من الإدخال: قائمة مفصولة بفواصل للعناصر التي سيُطبَّق عليها تخفيض بنسبة 50% (بمطابقة الرموز الموجودة في الهاش حسب الاسم).
اطبع بالترتيب التالي:
- سطرًا واحدًا لكل عنصر بالتنسيق
<item>: $<final_price>، حيث يكون السعر النهائي هو القيمة بعد التخفيض عندما يكون العنصر موجودًا في قائمة التخفيض، أو القيمة الأصلية بخلاف ذلك. استخدم التكرار بواسطةeach. حافظ على الترتيب الأصلي للعناصر. استخدم القسمة الصحيحة للتخفيض (price / 2). Was: $<n>: المجموع الأصلي (استخدمvalues.sum)Now: $<n>: المجموع بعد التخفيض- أسماء العناصر التي لا يزال سعرها 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؛ اطبع الأسطر، الإجماليات، العناصر باهظة الثمن
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق العمليات
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 عبر الإنترنت