Skip to content

Instantly share code, notes, and snippets.

@bulwinkel
Last active June 23, 2016 01:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bulwinkel/b830759dbcea5c9437222dd6f449357f to your computer and use it in GitHub Desktop.
Save bulwinkel/b830759dbcea5c9437222dd6f449357f to your computer and use it in GitHub Desktop.
Run diff on 2 sequences
extension SequenceType where Self.Generator.Element : Equatable {
typealias Diff = (added: [Self.Generator.Element], removed: [Self.Generator.Element])
func diff(changed:[Self.Generator.Element]) -> Diff {
let added:[Self.Generator.Element] = changed.reduce([]) {
!self.contains($1) ? $0 + [$1] : $0
}
let removed:[Self.Generator.Element] = self.reduce([]) {
!changed.contains($1) ? $0 + [$1] : $0
}
return (added: added, removed: removed)
}
}
@bulwinkel
Copy link
Author

Basic Tests:

let arr1 = [3,4,5,6,7,8]

func assertDiff(diff: (added: [Int], removed:[Int]), expectedAdded: [Int], expectedRemoved: [Int]) {
    assert(diff.added == expectedAdded)
    assert(diff.removed == expectedRemoved)
}

assertDiff(arr1.diff([]), expectedAdded: [], expectedRemoved: [3,4,5,6,7,8])
assertDiff(arr1.diff([1]), expectedAdded: [1], expectedRemoved: [3,4,5,6,7,8])
assertDiff(arr1.diff([7,8,9,0]), expectedAdded: [9,0], expectedRemoved: [3,4,5,6])

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