Standard Library Patterns
Filtered Prefix
filter and prefix can narrow a collection in two readable steps.
Keep the first matching values
filtered_prefix.swift
Replay: real traced execution (multi-file project)
let minimum = 5
let readings = [2, 4, 6, 8, 10]
let filtered = readings.filter { value in
return value >= minimum
}
let firstTwo = Array(filtered.prefix(2))
let message = "\(firstTwo[0]),\(firstTwo[1])"
print(message)
let minimum = 3
let readings = [2, 4, 6, 8, 10]
let filtered = readings.filter { value in
return value >= minimum
}
let firstTwo = Array(filtered.prefix(2))
let message = "\(firstTwo[0]),\(firstTwo[1])"
print(message)
let minimum = 7
let readings = [2, 4, 6, 8, 10]
let filtered = readings.filter { value in
return value >= minimum
}
let firstTwo = Array(filtered.prefix(2))
let message = "\(firstTwo[0]),\(firstTwo[1])"
print(message)
minimum ← 5, readings ← [2, 4, 6, 8, 10], filtered ← [6, 8, 10]
1let minimum→ 5 = 5 //@minimum=3, 72let readings→ [2, 4, 6, 8, 10] = [2, 4, 6, 8, 10]3let filtered→ [6, 8, 10] = readings[2, 4, 6, 8, 10].filter { value in4 return value >= minimum5}6let firstTwo→ [6, 8] = Array(filtered[6, 8, 10].prefix(2))7let message→ 6,8 = "\(firstTwo[0]6),\(firstTwo[1]8)"89print(message6,8)output6,8
minimum ← 3, readings ← [2, 4, 6, 8, 10], filtered ← [4, 6, 8, 10]
1let minimum→ 3 = 32let readings→ [2, 4, 6, 8, 10] = [2, 4, 6, 8, 10]3let filtered→ [4, 6, 8, 10] = readings[2, 4, 6, 8, 10].filter { value in4 return value >= minimum5}6let firstTwo→ [4, 6] = Array(filtered[4, 6, 8, 10].prefix(2))7let message→ 4,6 = "\(firstTwo[0]4),\(firstTwo[1]6)"89print(message4,6)output4,6
minimum ← 7, readings ← [2, 4, 6, 8, 10], filtered ← [8, 10], firstTwo ← [8, 10]
1let minimum→ 7 = 72let readings→ [2, 4, 6, 8, 10] = [2, 4, 6, 8, 10]3let filtered→ [8, 10] = readings[2, 4, 6, 8, 10].filter { value in4 return value >= minimum5}6let firstTwo→ [8, 10] = Array(filtered[8, 10].prefix(2))7let message→ 8,10 = "\(firstTwo[0]8),\(firstTwo[1]10)"89print(message8,10)output8,10
filter prefix
Filtering chooses matching values, and `prefix` takes the first values from that filtered result.