Lesson 28Collections

Collection Methods

Powerful Collection Methods

Swift provides many built-in methods to search, transform, and analyze collections. Master these to write cleaner code!

Searching Methods

.contains()

Check if element exists

.first { } / .last { }

Find first/last matching

.firstIndex(of:)

Find index of element

.allSatisfy { }

Check all match condition

Transform Methods

.map { }

Transform each element

.filter { }

Keep matching elements

.reduce()

Combine into one value

Special Transform Methods

.compactMap { }

Transform and remove nils

.flatMap { }

Flatten nested collections

Method Chaining

Chain methods together for powerful one-liners: .filter { }.map { }.sorted()

main.swift
// Common collection methods work on all types!
let numbers = [5, 2, 8, 1, 9, 3, 7, 4, 6]

// SEARCHING
let hasEight = numbers.contains(8)  // true
let firstEven = numbers.first { $0 % 2 == 0 }  // 2
let lastEven = numbers.last { $0 % 2 == 0 }  // 6
let indexOfNine = numbers.firstIndex(of: 9)  // 4

// CHECKING CONDITIONS
let allPositive = numbers.allSatisfy { $0 > 0 }  // true
let hasNegative = numbers.contains { $0 < 0 }  // false

// TRANSFORMING
let doubled = numbers.map { $0 * 2 }
// [10, 4, 16, 2, 18, 6, 14, 8, 12]

let evens = numbers.filter { $0 % 2 == 0 }
// [2, 8, 4, 6]

let sum = numbers.reduce(0) { $0 + $1 }
// 45 (0 + 5 + 2 + 8 + ...)

// Short form
let product = numbers.reduce(1, *)
// 362880 (1 * 5 * 2 * 8 * ...)

// SORTING
let sorted = numbers.sorted()  // [1, 2, 3, 4, 5, 6, 7, 8, 9]
let descending = numbers.sorted(by: >)  // [9, 8, 7, 6, 5, 4, 3, 2, 1]

// CHAINING METHODS
let result = numbers
    .filter { $0 > 3 }      // [5, 8, 9, 7, 4, 6]
    .map { $0 * 2 }         // [10, 16, 18, 14, 8, 12]
    .sorted()               // [8, 10, 12, 14, 16, 18]
print(result)

// COMPACT MAP (removes nils)
let strings = ["1", "2", "hello", "3"]
let validNumbers = strings.compactMap { Int($0) }
// [1, 2, 3]

// FLAT MAP (flattens nested arrays)
let nested = [[1, 2], [3, 4], [5, 6]]
let flat = nested.flatMap { $0 }
// [1, 2, 3, 4, 5, 6]

// MIN and MAX
let smallest = numbers.min()  // 1
let largest = numbers.max()   // 9

Try It Yourself!

Given an array of numbers 1-20, use method chaining to: filter evens, square them, and find the sum!