Collections
Set Membership
Sets keep unique values and answer membership questions quickly.
Track unique names
set_membership.swift
Replay: real traced execution (multi-file project)
let incoming = "beta"
var active: Set<String> = ["alpha", "beta"]
let wasActive = active.contains(incoming)
active.insert(incoming)
print("incoming=\(incoming)")
print("wasActive=\(wasActive)")
print("activeCount=\(active.count)")
let incoming = "gamma"
var active: Set<String> = ["alpha", "beta"]
let wasActive = active.contains(incoming)
active.insert(incoming)
print("incoming=\(incoming)")
print("wasActive=\(wasActive)")
print("activeCount=\(active.count)")
let incoming = "alpha"
var active: Set<String> = ["alpha", "beta"]
let wasActive = active.contains(incoming)
active.insert(incoming)
print("incoming=\(incoming)")
print("wasActive=\(wasActive)")
print("activeCount=\(active.count)")
incoming ← beta, active ← ["beta", "alpha"], wasActive ← true
1let incoming→ beta = "beta" //@incoming="gamma", "alpha"2var active→ ["beta", "alpha"]: Set<String> = ["alpha", "beta"]3let wasActive→ true = active["beta", "alpha"].contains(incomingbeta)4active["beta", "alpha"].insert(incomingbeta)56print("incoming=\(incomingbeta)")7print("wasActive=\(wasActivetrue)")8print("activeCount=\(active.count2)")outputincoming=beta wasActive=true activeCount=2
incoming ← gamma, active ← ["alpha", "beta"], wasActive ← false
1let incoming→ gamma = "gamma"2var active→ ["alpha", "beta"]: Set<String> = ["alpha", "beta"]3let wasActive→ false = active["alpha", "beta"].contains(incominggamma)4active→ ["gamma", "alpha", "beta"].insert(incominggamma)56print("incoming=\(incominggamma)")7print("wasActive=\(wasActivefalse)")8print("activeCount=\(active.count3)")outputincoming=gamma wasActive=false activeCount=3
incoming ← alpha, active ← ["alpha", "beta"], wasActive ← true
1let incoming→ alpha = "alpha"2var active→ ["alpha", "beta"]: Set<String> = ["alpha", "beta"]3let wasActive→ true = active["alpha", "beta"].contains(incomingalpha)4active["alpha", "beta"].insert(incomingalpha)56print("incoming=\(incomingalpha)")7print("wasActive=\(wasActivetrue)")8print("activeCount=\(active.count2)")outputincoming=alpha wasActive=true activeCount=2
Check and Insert
activestarts withalphaandbeta.incomingisbeta.contains(incoming)returns true.insert(incoming)keeps only onebeta.- The final set count is still
2. | Incoming | Was active? | Final count | | --- | --- | --- | |beta|true|2| |gamma|false|3|
sets
Use a set when uniqueness matters more than order. `contains` checks membership and `insert` keeps only one copy of each value.
Exercise: set_membership.swift
Check whether an incoming name is active, insert it, and print the final set count