filter and prefix can narrow a collection in two readable steps.

Keep the first matching values

minimum
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)
  1. 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
  1. 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
  1. 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.