Skip to content

Instantly share code, notes, and snippets.

@igor9silva
Last active February 28, 2018 22:13
Show Gist options
  • Save igor9silva/33c6ef114c6c0b46ee7ea039581fe749 to your computer and use it in GitHub Desktop.
Save igor9silva/33c6ef114c6c0b46ee7ea039581fe749 to your computer and use it in GitHub Desktop.
Removing duplicates in swift, keeping order
var arr = [1, 1, 1, 2, 2, 3, 4, 5, 6, 6, 6, 6, 6, 7, 8]
var list = ["A","A","A","A","A","A","B","C","D","E","E","E","E"]
let set = Set(arr) // no duplicates but no order either
let orderedSet = NSOrderedSet(array: arr) // no duplicates and ordered, but not an array
let arrayFromOrderedSet = Array(NSOrderedSet(array: arr)) // is array, ordered, no duplicates, but loses type info
let sorted = Array(Set(arr)).sorted() // is array, ordered, no duplicates, keeps type info, but limited to ascending order
extension Array where Element: Equatable {
func duplicatesRemoved() -> [Element] {
return reduce([]) { $0.contains($1) ? $0 : $0 + [$1] }
}
mutating func removeDuplicates() {
self = duplicatesRemoved()
}
}
list.duplicatesRemoved() // new list -> ["A", "B", "C", "D", "E"]
list.removeDuplicates() // same list -> ["A", "B", "C", "D", "E"]
arr.duplicatesRemoved() // new list -> [1, 2, 3, 4, 5, 6, 7, 8]
arr.removeDuplicates() // same list -> [1, 2, 3, 4, 5, 6, 7, 8]
@igor9silva
Copy link
Author

Tabs > Spaces

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment