مجمّع السجلات
جزء من قسم المنطق والتدفق في رحلة Swift على Coddy — الدرس 55 من 56.
التحدي
متوسطأنت تقوم بمعالجة سجلات الوصول. اقرأ سطراً واحداً من المدخلات: قائمة مفصولة بفاصلة من إدخالات level:user:bytes.
بعض الإدخالات غير صالحة ويجب تخطيها: أي إدخال لا يمكن فيه تحليل bytes كعدد صحيح، أو إذا لم يكن level واحداً من INFO، WARN، ERROR (حساس لحالة الأحرف).
اطبع، بهذا الترتيب:
- سطر واحد لكل مستوى (level) ظهر مرة واحدة على الأقل، مرتبة بهذا الترتيب الثابت:
ERROR،WARN،INFO. كل سطر يكون بتنسيق<level>: <count> (<bytes>)حيثcountهو عدد الإدخالات الصالحة في ذلك المستوى وbytesهو مجموع البايتات الخاصة بها. Top user: <name> (<bytes>): المستخدم الذي لديه أكبر إجمالي بايتات عبر جميع الإدخالات الصالحة. في حالة التعادل، يتم الفصل حسب الاسم أبجدياً.Skipped: <n>مع عدد الإدخالات المشوهة (malformed).
بالنسبة للمدخلات INFO:alice:100,WARN:bob:bad,ERROR:alice:50,INFO:bob:200,DEBUG:cara:10,INFO:alice:75، يكون المخرج هو:
ERROR: 1 (50)
INFO: 3 (375)
Top user: alice (225)
Skipped: 2جرّب بنفسك
let entries = readLine()!.components(separatedBy: ",")
let order = ["ERROR", "WARN", "INFO"]
let validLevels: Set<String> = ["INFO", "WARN", "ERROR"]
// TODO: تحليل كل إدخال، تجاهل الإدخالات غير الصالحة، تجميع البيانات لكل مستوى + لكل مستخدم؛
// طباعة المستويات بترتيب ثابت (فقط إذا ظهرت)، ثم المستخدم الأكثر نشاطاً، ثم عدد الإدخالات التي تم تخطيها (Skipped)
جميع دروس المنطق والتدفق
1النصوص بعمق
العد والفهارسحالة الأحرف وإزالة الفراغاتالبحث في النصوصتقسيم ودمج النصوصاستبدال النصوص الفرعيةمراجعة - التحقق من اسم المستخدم4المجموعات
إنشاء المجموعاتالاتحاد والتقاطعالطرح والفرق المتماثلالمجموعات الجزئية والشاملةمراجعة - تصفية الـ Tag7مشروع - متتبع العادات
نظرة عامة على المشروعتحديد كمكتمل2النطاقات والخطوات
المغلقة مقابل نصف المفتوحةالخطوة (Stride)دوال النطاقاتالنطاقات في Switchملخص - شبكة التقويم5الدوال من الرتبة العليا - الجزء الأول
MapFilterReduceربط Map و Filter و Reduceمراجعة - إحصائيات الكلمات