map، filter، reduce (map, filter, reduce)
در سوئیفت، «map»، «filter» و «reduce» ابزارهای پردازش کالکشن ها هستند. «کالکشن (Collection)» یعنی مجموعه ای از داده ها مثل آرایه. با این سه تابع، داده ها را تبدیل، گزینش، و جمع بندی می کنیم؛ درست مثل ویرایش لیست نمره ها در دفتر.
تبدیل و گزینش با map و filter
تابع «map» هر عضو را تبدیل می کند. تابع «filter» بعضی اعضا را نگه می دارد. سپس «reduce» همه را به یک نتیجه تبدیل می کند؛ مثلاً جمع.
let nums = [1, 2, 3, 4]
let doubled = nums.map { $0 * 2 }
print(doubled)
let evens = nums.filter { $0 % 2 == 0 }
print(evens)
let sum = nums.reduce(0, +)
print(sum)
نکته: «کلوژر (Closure)» همان تابع ناشناس است. داخل آکولاد نوشته می شود.
تبدیل رشته ها و جمع با compactMap و reduce
با «compactMap» فقط مقدارهای قابل تبدیل را می گیریم. سپس با «reduce» روی آن ها عملیات انجام می دهیم؛ مانند جمع.
let raw = ["1", "x", "2", "3"]
let ints = raw.compactMap { Int($0) }
let total = ints.reduce(0, +)
print(total)
گام های عملی
- یک آرایه بساز و با «map» مقادیر را دوبرابر کن.
- با «filter» فقط زوج ها را نگه دار.
- با «reduce» مجموع را حساب کن و چاپ کن.
برای مرجع کلی، صفحه کالکشن ها را ببین. سپس تفاوت ست ها و دیکشنری ها را مرور کن.
جمع بندی سریع
- map: تبدیل عضوها به عضوهای جدید.
- filter: نگه داشتن عضوهای مدنظر.
- reduce: ساخت یک نتیجه نهایی.
- compactMap: حذف تبدیل های ناموفق.