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

تحديث القواميس

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

تكتب في القاموس بنفس الطريقة التي تقرأ بها منه: باستخدام الرمز المنخفض (subscript).

var prices: [String: Int] = ["apple": 1]
prices["bread"] = 3                // يضيف المفتاح
prices["apple"] = 2                // يحدّث مفتاحاً موجوداً
prices["apple"] = nil              // يزيل المفتاح

هناك طريقتان مسماتان تقومان بنفس الشيء بشكل أكثر صراحة:

prices.updateValue(5, forKey: "milk") // تعيد القيمة القديمة، أو nil
prices.removeValue(forKey: "bread")  // تعيد القيمة التي تمت إزالتها، أو nil

تُرجع الطرق المسماة القيمة السابقة، وهو أمر مفيد عندما تحتاج إلى معرفة ما إذا كان المفتاح موجوداً بالفعل.

يتسلسل نمط الفهرس الافتراضي (default-subscript pattern) من الدرس السابق بشكل مثالي مع التعديل (mutation)، وهذه هي الطريقة التي تبني بها عداداً دون كتابة if:

var counts: [String: Int] = [:]
for letter in ["a", "b", "a"] {
    counts[letter, default: 0] += 1
}
// counts == ["a": 2, "b": 1]
challenge icon

التحدي

متوسط

اقرأ سطراً واحداً من المدخلات: قائمة مفصولة بفاصلة من العمليات على قاموس ابتدائي. كل عملية هي واحدة مما يلي:

  • set:<key>:<value> إضافة أو تحديث (القيمة هي عدد صحيح)
  • add:<key>:<value> إضافة القيمة إلى القيمة الموجودة (استخدم نمط default-subscript)
  • del:<key> إزالة المفتاح

بعد تطبيق كل عملية بالترتيب على [String: Int] فارغ في البداية، اطبع المفاتيح بـ ترتيب أبجدي، مفتاح واحد في كل سطر، بالتنسيق <key>=<value>.

للمدخلات set:a:5,add:a:3,set:b:1,del:b,add:c:2، المخرجات هي:

a=8
c=2

ورقة مرجعية

قم بتعديل قاموس باستخدام الـ subscript أو الطرق المسماة:

prices["bread"] = 3      // إضافة
prices["apple"] = 2      // تحديث
prices["apple"] = nil    // إزالة

prices.updateValue(5, forKey: "milk") // يعيد القيمة القديمة أو nil
prices.removeValue(forKey: "bread")   // يعيد القيمة المحذوفة أو nil

استخدم نمط الـ subscript الافتراضي للتعديل بدون if:

var counts: [String: Int] = [:]
for letter in ["a", "b", "a"] {
    counts[letter, default: 0] += 1
}
// counts == ["a": 2, "b": 1]

جرّب بنفسك

let ops = readLine()!.components(separatedBy: ",")
var dict: [String: Int] = [:]

// TODO: تحليل كل عملية وتطبيق set/add/del؛ طباعة المفاتيح المرتبة مع القيم
quiz iconاختبر نفسك

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

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