Skip to content

Commit 8302dea

Browse files
committed
Implement removing an element
1 parent 2214ebf commit 8302dea

2 files changed

Lines changed: 30 additions & 1 deletion

File tree

Sources/SortedArray.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,14 @@ public struct SortedArray<Element> {
5757
_elements.append(contentsOf: newElements)
5858
_elements.sort(by: areInIncreasingOrder)
5959
}
60+
61+
/// Removes an element from the array, preserving the sort order.
62+
///
63+
/// - Complexity: O(_log(n)_), where _n_ is the size of the array.
64+
public mutating func remove(_ element: Element) {
65+
guard let index = index(of: element) else { return }
66+
_elements.remove(at: index)
67+
}
6068
}
6169

6270
extension SortedArray where Element: Comparable {

Tests/SortedArrayTests/SortedArrayTests.swift

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,24 @@ class SortedArrayTests: XCTestCase {
156156
let sut = SortedArray(unsorted: ["a", "b", "c"])
157157
assertElementsEqual(sut.filter { $0 != "a" }, ["b", "c"])
158158
}
159+
160+
func testRemoveAtBeginningPreservesSortOrder() {
161+
var sut = SortedArray(unsorted: 1...3)
162+
sut.remove(1)
163+
assertElementsEqual(sut, [2,3])
164+
}
165+
166+
func testRemoveInMiddlePreservesSortOrder() {
167+
var sut = SortedArray(unsorted: 1...5)
168+
sut.remove(4)
169+
assertElementsEqual(sut, [1,2,3,5])
170+
}
171+
172+
func testRemoveAtEndPreservesSortOrder() {
173+
var sut = SortedArray(unsorted: 1...3)
174+
sut.remove(3)
175+
assertElementsEqual(sut, [1,2])
176+
}
159177
}
160178

161179
extension SortedArrayTests {
@@ -183,7 +201,10 @@ extension SortedArrayTests {
183201
("testMin", testMin),
184202
("testMax", testMax),
185203
("testCustomStringConvertible", testCustomStringConvertible),
186-
("testCustomDebugStringConvertible", testCustomDebugStringConvertible)
204+
("testCustomDebugStringConvertible", testCustomDebugStringConvertible),
205+
("testRemoveAtBeginningPreservesSortOrder", testRemoveAtBeginningPreservesSortOrder),
206+
("testRemoveInMiddlePreservesSortOrder", testRemoveInMiddlePreservesSortOrder),
207+
("testRemoveAtEndPreservesSortOrder", testRemoveAtEndPreservesSortOrder),
187208
]
188209
}
189210
}

0 commit comments

Comments
 (0)