Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added func element(equalTo element:Element) -> Element? #2

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions Sources/OrderedSet+Array.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,14 @@ extension OrderedSet : ArrayLiteralConvertible, RangeReplaceableCollectionType {
public mutating func replaceRange<C : CollectionType where C.Generator.Element == IndexingGenerator<OrderedSet>.Element>(subRange: Range<Index>, with newElements: C) {
let oldArray = array[subRange]
let oldSet = Set(oldArray)
let (newArray, newSet) = collapse(newElements)
var (newArray, newSet) = collapse(newElements)
let deletions = oldSet.subtract(newSet)
set.subtractInPlace(deletions)
newArray = newArray.filter { (element) -> Bool in
return !set.contains(element)
}
set.unionInPlace(newSet)
array.replaceRange(subRange, with: newArray)
array = array.enumerate().filter { (index, element) in return subRange.contains(index) || subRange.startIndex == index || !newSet.contains(element) }.map { $0.element }
}

public var capacity: Int {
Expand Down
8 changes: 8 additions & 0 deletions Sources/OrderedSet+Set.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@ extension OrderedSet {
return set.contains(member)
}

/// Returns Element equal to input one
public func element(equalTo element:Element) -> Element? {
if let indexOfElement = set.indexOf(element) {
return set[indexOfElement]
}
return nil
}

/// Remove the member from the ordered set and return it if it was present.
public mutating func remove(member: Element) -> Element? {
guard let index = array.indexOf(member) else { return nil }
Expand Down
18 changes: 18 additions & 0 deletions Tests/OrderedSetTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,24 @@ class OrderedSetTests: XCTestCase {
XCTAssert(orderedSet == ["Brad", "Lorraine", "Natalie", "Sarah", "Scott"])
}

func testElementEqualTo() {
let orderedSet: OrderedSet<String> = ["Brad", "Lorraine", "Brad", "Sarah"]
XCTAssertNotNil(orderedSet.element(equalTo: "Lorraine"))
XCTAssertNil(orderedSet.element(equalTo: "Aleksei"))
}

func testOrderPreservance() {
var orderedSet1: OrderedSet<Int> = [3,2,1]
let orderedSet2: OrderedSet<Int> = [3,5,1]

orderedSet1.unionInPlace(orderedSet2)

print("orderedSet1.array: ", orderedSet1.array)

XCTAssert(orderedSet1.array == [3,2,1,5])


}
}

func ==(lhs: OrderedSet<String>, rhs: Array<String>) -> Bool {
Expand Down