Created
May 6, 2016 15:16
-
-
Save benasher44/e49e5e5d15442d4abb676e5bc79683bf to your computer and use it in GitHub Desktop.
==, != for SequenceType and Dictionary with SequenceType values
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
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