Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save benasher44/e49e5e5d15442d4abb676e5bc79683bf to your computer and use it in GitHub Desktop.
Save benasher44/e49e5e5d15442d4abb676e5bc79683bf to your computer and use it in GitHub Desktop.
==, != for SequenceType and Dictionary with SequenceType values
func ==<S: SequenceType where S.Generator.Element: Equatable>(lhs: S, rhs: S) -> Bool {
var lgen = lhs.generate()
var rgen = rhs.generate()
while true {
let lelem = lgen.next()
let relem = rgen.next()
if let lelem = lelem, relem = relem {
if lelem != relem {
// elements aren't equal
return false
}
} else if lelem == nil && relem == nil {
// We're done, exit the loop
break
} else {
// one of the generators was exhausted early
return false
}
}
return true
}
func !=<S: SequenceType where S.Generator.Element: Equatable>(lhs: S, rhs: S) -> Bool {
return !(lhs == rhs)
}
func ==<Key: Equatable, Value: SequenceType where Value.Generator.Element: Equatable>(lhs: [Key: Value], rhs: [Key: Value]) -> Bool {
guard lhs.count == rhs.count else { return false }
for (lkey, lvalue) in lhs {
if let rvalue = rhs[lkey] {
if lvalue != rvalue {
return false
}
} else {
// right side didn't have the key
return false
}
}
return true
}
func !=<Key: Equatable, Value: SequenceType where Value.Generator.Element: Equatable>(lhs: [Key: Value], rhs: [Key: Value]) -> Bool {
return !(lhs == rhs)
}
print("\(["":[2, 2]] != ["": [2, 2]])")
print("\([2] != [2, 2])")
print("\(["": 2] != ["": 2])")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment