Các phép xử lý map, filter, reduce là các phép xử lý được áp dụng trên các đối tượng dạng collection như Array, Dictionay, Set. Nó cho phép người lập trình dễ dàng thao tác với kiểu dữ liệu collection và làm code trở nên ngắn ngọn và rõ ràng hơn.
1. Map
Sử dụng phép xử lý Map để lặp duyệt qua từng phần tử trong một collection, đồng thời sử dụng các phép biến đổi để thay đổi giá trị của từng phần tử. Kết quả cuối cùng của phép xử lý map là một mảng các phần tử của collection cũ sau khi áp dụng các phép biến đổi.
Ví dụ: lũy thừa từng phần tử trong mảng.

Với cách truyền thống ta sử dụng vòng lặp để duyệt từng phần tử trong mảng, tính lũy thừa từng cái rồi thêm vào một mảng mới:
let A = [2.0, 4.0, 5.0, 7.0]
var B: [Double] = []
for value in A {
B.append(value * value)
}
Sử dụng Map code sẽ ngắn gọn súc tích hơn nhiều, chỉ cần 2 dòng là xong:
let A = [2.0,4.0,5.0,7.0]
let B = A.map {$0 * $0}
Qua ví dụ trên ta thấy rằng phép xử lý map sử dụng closure làm tham số, và toàn bộ các phép tính toán đối phần tử trong mảng sẽ được định nghĩa trong closure này. Ta có thể sử dụng các cú pháp ngắn gọn hoặc tường minh của closure đối với phép xử lý map. Đoạn xử lý map ở trên có thể được viết với các cách khác nhau như dưới đây.
Cách 1:
let A = [2.0, 4.0, 5.0, 7.0]
let B = A.map {$0 * $0}
Cách 2:
let A = [2.0, 4.0, 5.0, 7.0]
let B = A.map {value in value * value}
Cách 3:
let A = [2.0, 4.0, 5.0, 7.0]
let B = A.map({
(value: Double) -> Double in
return value * value
})
Cách 4:
let A = [2.0, 4.0, 5.0, 7.0]
let B = A.map({
(value: Double) -> Double in value * value
})
Ngoài việc áp dụng phép xử lý Map đối với Array, ta còn có thể sử dụng map đối với bất kỳ kiểu dữ liệu collection khác như Set hoặc Dictionary.
Sử dụng với Set:
let widthInMeters: Set = [4.0, 6.2, 8.9]
let widthInFeet = widthInMeters.map { meters in meters * 3.2808 }
Sử dụng với Dictionary:
let milesToPoint = ["point1": 120.0, "point2": 50.0, "point3": 70.0]
let kmToPoint = milesToPoint.map { name,miles in miles * 1.6093 }
2. Filter
Sử dụng phép xử lý filter duyệt qua tất cả các phần tử có trong collection và chỉ lấy ra các phần tử thoả mãn điều kiện cho trước và bổ sung vào mảng kết quả.
Ví dụ: tìm số chẵn trong một mảng số nguyên.

Thông thường thì chúng ta sẽ sử dụng vòng lặp for để làm:
let digits = [1, 4, 10, 15]
var even: [Int] = []
for value in digits {
if (value % 2) == 0 {
even.append(value*value)
}
}
Còn đây là cách sử dụng Filter:
let digits = [1,4,10,15]
let even = digits.filter { $0 % 2 == 0 }
Filter cũng có nhiều cách viết và sử dụng cho nhiều kiểu khác nhau như Map.
3. Reduce
Reduce được sử dụng để kết hợp tất cả các phần tử trong một collection thành một kết quả đầu ra.
Ví dụ: tính tổng tất cả các giá trị có trong một mảng.

Sử dụng Reduce chúng ta cần truyền vào giá trị khởi tạo và toán tử thực hiện:
let items = [2.0, 4.0, 5.0, 7.0]
let total = items.reduce(0.0, combine: +)
Phép xử lý combine dùng toán tử + cũng có thể áp dụng với kiểu dữ liệu String:
let codes = ["abc","def","ghi"]
let text = codes.reduce("", combine: +)
Hy vọng với các toán phép xử lý mình vừa giới thiệu các bạn sẽ sử dụng thành thục và trở nên pro hơn. Cám ơn các bạn đã theo dõi bài viết.