تجميع القيم
جزء من قسم المنطق والتدفق في رحلة Swift على Coddy — الدرس 16 من 56.
يعد نمط default-subscript هو الأساس لشكلين من الأشكال اليومية.
عداد التكرار: حساب عدد مرات ظهور كل مفتاح.
let letters = ["a", "b", "a", "c", "a"]
var counts: [String: Int] = [:]
for letter in letters {
counts[letter, default: 0] += 1
}
// counts == ["a": 3, "b": 1, "c": 1]التجميع (Bucketing): جمع القيم تحت مفتاح مشتق:
let words = ["hi", "hello", "yo", "hey"]
var byLength: [Int: [String]] = [:]
for w in words {
byLength[w.count, default: []].append(w)
}
// [2: ["hi", "yo"], 5: ["hello"], 3: ["hey"]]القيمة الافتراضية لحالة التقسيم (bucketing) هي مصفوفة فارغة. تُستخدم قيمة default: فقط عندما يكون المفتاح مفقوداً، ثم يقوم الطرف الأيمن بتعديل الإدخال في مكانه.
التحدي
متوسطاقرأ سطرًا واحدًا من المدخلات: قائمة كلمات مفصولة بفاصلة.
اطبع، بهذا الترتيب:
- سطر واحد لكل طول كلمة يظهر في المدخلات، مرتبة من الأقصر إلى الأطول، بالتنسيق
<length>: <count>حيثcountهو عدد الكلمات التي ظهرت بهذا الطول Most common length: <n>حيثnهو الطول الذي يملك أعلى تكرار. في حال التساوي، اختر الطول الأقصر.
للمدخلات hi,hello,yo,hey,bonjour,bye، يكون المخرج:
2: 2
3: 2
5: 1
7: 1
Most common length: 2(الطولان 2 و 3 ظهرا مرتين. تم كسر التعادل باختيار الأقصر، لذا 2 هو الفائز.)
ورقة مرجعية
عداد التكرار – عدّ مرات ظهور كل مفتاح باستخدام default: 0:
var counts: [String: Int] = [:]
for letter in letters {
counts[letter, default: 0] += 1
}التجميع (Bucketing) – تجميع القيم تحت مفتاح مشتق باستخدام default: []:
var byLength: [Int: [String]] = [:]
for w in words {
byLength[w.count, default: []].append(w)
}تُستخدم القيمة default: فقط عندما يكون المفتاح مفقوداً؛ ثم يتم تعديل النتيجة في مكانها.
جرّب بنفسك
let words = readLine()!.components(separatedBy: ",")
// TODO: عد الكلمات حسب الطول؛ اطبعها مرتبة؛ اطبع الأكثر شيوعاً (في حال التساوي: الأقصر)
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق والتدفق
1النصوص بعمق
العد والفهارسحالة الأحرف وإزالة الفراغاتالبحث في النصوصتقسيم ودمج النصوصاستبدال النصوص الفرعيةمراجعة - التحقق من اسم المستخدم4المجموعات
إنشاء المجموعاتالاتحاد والتقاطعالطرح والفرق المتماثلالمجموعات الجزئية والشاملةمراجعة - تصفية الـ Tag7مشروع - متتبع العادات
نظرة عامة على المشروعتحديد كمكتمل2النطاقات والخطوات
المغلقة مقابل نصف المفتوحةالخطوة (Stride)دوال النطاقاتالنطاقات في Switchملخص - شبكة التقويم5الدوال من الرتبة العليا - الجزء الأول
MapFilterReduceربط Map و Filter و Reduceمراجعة - إحصائيات الكلمات