Array extension to remove object by value
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.
Introduction
Removing an item by value from an array extension is common in Swift, but implementation details affect correctness and performance. The simplest approach relies on Equatable and firstIndex(of:). For all matches, use removeAll with a predicate.
Remove First Match with an Extension
This extension mutates the array and removes only the first matching value. It is clear and efficient for many UI and state-management cases.
This avoids scanning past the first needed removal.
Remove All Matches
If your intent is to remove every occurrence, prefer removeAll(where:).
removeAll is expressive and minimizes custom utility code.
Value Types, Reference Types, and Identity
For value types, Equatable usually maps to value equality. For reference types, you may need identity checks instead of value checks depending on domain logic.
Be explicit about whether you mean same identity or same value semantics.
API Design Considerations
Choose method names that reflect behavior precisely, such as removeFirst(_:) versus removeAll(_:). Ambiguous names produce subtle bugs when callers assume one behavior and get another.
If arrays are large and removals are frequent, consider different data structures like Set or dictionary-backed indexes. Array removals can be costly because elements after the removed index shift.
For shared logic across app layers, keep these helpers in one utility module and add tests for duplicate values, missing values, and empty arrays.
Performance Patterns for Frequent Removals
Repeated value-based removals on large arrays can become expensive because each removal shifts remaining elements. If you remove many items, batch operations are usually faster than repeated single removals.
This single pass is more efficient than calling a first-match removal multiple times. For workloads dominated by membership checks and deletions, Set is often a better primary structure than Array. Choose the structure that matches access patterns rather than forcing arrays for every case.
When arrays back UI state, batch removals can also reduce redundant re-rendering. Instead of mutating state repeatedly inside loops, compute the final filtered array once and publish one state update. This pattern improves performance and makes state transitions easier to reason about in reactive architectures.
For safety, include tests for duplicate values and non-existing values so extensions remain deterministic. Test clarity matters because small helper functions are reused widely.
Consistent helper semantics reduce bugs during refactoring and feature growth.
This pays off as teams scale and code ownership changes over time.
Small APIs with clear guarantees are easier to trust in shared codebases.
Common Pitfalls
- Naming a method
removewhile removing only the first match. - Forgetting
mutatingon extension methods that modify value types. - Assuming
Equatablesemantics match object identity in all models. - Repeatedly removing from large arrays in hot paths without profiling.
- Duplicating similar removal helpers across files and drifting behavior.
Summary
- Use
firstIndex(of:)for first-match removals inEquatablearrays. - Use
removeAll(where:)when every match should be deleted. - Define equality semantics clearly for reference-type elements.
- Pick method names that communicate exact behavior.
- Profile large-array mutation paths and choose data structures accordingly.
Related reading
- Array from dictionary keys in swift
- Array from dictionary keys in swift
- Array maximum difference algorithm that runs in On?
- Array must contain 1 element
- ASP.NET MVC HTML helper methods for new HTML5 input types
- ASP.NET MVC Razor render without encoding
- Array of 10000 having 16bit elements, find bits set unlimited RAM - Google interview
- Array of random numbers with sum in given range?

DSA Fundamentals
Master algorithmic patterns and data structures through hands-on LeetCode-style problems - from arrays and hashing to dynamic programming and advanced graphs.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.