Skip to content

Instantly share code, notes, and snippets.

@toshi0383
Created December 9, 2016 05:15
Show Gist options
  • Save toshi0383/e54b376e2b864ced46b8347c290201f0 to your computer and use it in GitHub Desktop.
Save toshi0383/e54b376e2b864ced46b8347c290201f0 to your computer and use it in GitHub Desktop.
extension Array where Element: Equatable {
typealias Enumerated = (Int, Element)
func diff(fromNewArray newArray: [Element]) -> (added: [Enumerated], deleted: [Enumerated]) {
// 削除分: newArrayにはないもの
var added: [Enumerated] = []
var deleted: [Enumerated] = []
for (i, e) in newArray.enumerated() {
guard i < self.count else {
added.append((i, e))
continue
}
if !self.contains(e) {
added.append((i, e))
}
}
// 追加分: newArrayにしかないもの
for (i, e) in self.enumerated() {
guard i < self.count else {
deleted.append((i, e))
continue
}
if !newArray.contains(e) {
deleted.append((i, e))
}
}
return (added, deleted)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment