Last active
February 14, 2018 17:29
-
-
Save khanlou/c33e1f3135a40981836ae131833a2b55 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| extension Sequence { | |
| func uniqueElements(by elementsEqual: (Element, Element) -> Bool) -> [Element] { | |
| var result: [Element] = [] | |
| for element in self { | |
| if !result.contains(where: { resultElement in elementsEqual(element, resultElement) }) { | |
| result.append(element) | |
| } | |
| } | |
| return result | |
| } | |
| func uniqueElements<T: Hashable>(byProperty propertyAccessor: (Element) -> T) -> [Element] { | |
| var seen: Set<T> = [] | |
| var result: [Element] = [] | |
| for element in self { | |
| let property = propertyAccessor(element) | |
| if !seen.contains(property) { | |
| result.append(element) | |
| seen.insert(property) | |
| } | |
| } | |
| return result | |
| } | |
| } | |
| extension Sequence where Element: Equatable { | |
| func uniqueElements() -> [Element] { | |
| return uniqueElements(by: ==) | |
| } | |
| } | |
| extension Sequence where Element: Hashable { | |
| func uniqueElements() -> [Element] { | |
| var seen: Set<Element> = [] | |
| var result: [Element] = [] | |
| for element in self { | |
| if !seen.contains(element) { | |
| result.append(element) | |
| seen.insert(element) | |
| } | |
| } | |
| return result | |
| } | |
| } | |
| [1, 2, 1, 2, 3].uniqueElements() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment