Swift 元组比较
Swift tuples comparison
有人能告诉我,为什么在类似的情况下 Xcode returns:第一种情况 - 正确,第二种情况 - 错误?
这是一个元组比较。首先它比较整数,但它如何比较字符串?
(5, "life") < (5, "lifiee")// true
(99, "life") < (99, "death")// false
提前感谢您的回答!
在这两种情况下,数值是相等的。
区别在于字符串比较:
- "life" 是 < "lifiee",因为 "e" 是 < "i"
- "life" 是 > "death",因为 "l" 是 > "d"
字符串比较逐个字母进行,直到字母不相等或一个字符串结束。例如:
- "a" < "b",因为 "a" 在字母表中比 "b"
早
- "a" < "ab",因为 "a" 比 "ab"
短
- "aa" == "aa"
所以对于你的元组:
- {1, "a"} < {2, "a"} => 1 < 2
- {1, "a"} < {1, "b"} => 1 == 1 && "a" < "b"
最后,让我们提醒一下,为了比较元组,它们应该有:
- 相同数量的值。
- 相同类型。
在此基础上,从左到右依次比较元组,直到发现不匹配。
在第一个例子中:
(5, "life") < (5, "lifiee")
5 和 5 相等,所以我们跳到下两个值进行比较,即 "life" 和 "lifiee";因此:
"life" < "lifiee"
是true
,也就是说最后的结果是true
.
在第二个例子中:
(99, "life") < (99, "death")
99 和 99 相等,所以我们跳到下两个值进行比较,即 "life" 和 "death";因此:
"life" < "death"
是false
,也就是说最后的结果是false
.
要更深入地了解比较是如何进行的,您可以查看 Tuple comparison operators 建议:
@warn_unused_result
public func < <A: Comparable, B: Comparable, C: Comparable>(lhs: (A,B,C), rhs: (A,B,C)) -> Bool {
if lhs.0 != rhs.0 { return lhs.0 < rhs.0 }
if lhs.1 != rhs.1 { return lhs.1 < rhs.1 }
return lhs.2 < rhs.2
}
元组比较比较第一个、第二个等元素,直到找到两个不相等的元素。然后returns这两个元素的比较结果。如果所有元素都相等,则元组相等。
(5, x) < (6, y) returns 无论 x, y 是什么都为真,因为 5 < 6;第一个元素是不同的。
(5, x) < (5, y) returns 与x < y 相同的结果,因为第一个元素相同,所以比较第二个元素。
有人能告诉我,为什么在类似的情况下 Xcode returns:第一种情况 - 正确,第二种情况 - 错误? 这是一个元组比较。首先它比较整数,但它如何比较字符串?
(5, "life") < (5, "lifiee")// true
(99, "life") < (99, "death")// false
提前感谢您的回答!
在这两种情况下,数值是相等的。
区别在于字符串比较:
- "life" 是 < "lifiee",因为 "e" 是 < "i"
- "life" 是 > "death",因为 "l" 是 > "d"
字符串比较逐个字母进行,直到字母不相等或一个字符串结束。例如:
- "a" < "b",因为 "a" 在字母表中比 "b" 早
- "a" < "ab",因为 "a" 比 "ab" 短
- "aa" == "aa"
所以对于你的元组:
- {1, "a"} < {2, "a"} => 1 < 2
- {1, "a"} < {1, "b"} => 1 == 1 && "a" < "b"
最后,让我们提醒一下,为了比较元组,它们应该有:
- 相同数量的值。
- 相同类型。
在此基础上,从左到右依次比较元组,直到发现不匹配。
在第一个例子中:
(5, "life") < (5, "lifiee")
5 和 5 相等,所以我们跳到下两个值进行比较,即 "life" 和 "lifiee";因此:
"life" < "lifiee"
是true
,也就是说最后的结果是true
.
在第二个例子中:
(99, "life") < (99, "death")
99 和 99 相等,所以我们跳到下两个值进行比较,即 "life" 和 "death";因此:
"life" < "death"
是false
,也就是说最后的结果是false
.
要更深入地了解比较是如何进行的,您可以查看 Tuple comparison operators 建议:
@warn_unused_result
public func < <A: Comparable, B: Comparable, C: Comparable>(lhs: (A,B,C), rhs: (A,B,C)) -> Bool {
if lhs.0 != rhs.0 { return lhs.0 < rhs.0 }
if lhs.1 != rhs.1 { return lhs.1 < rhs.1 }
return lhs.2 < rhs.2
}
元组比较比较第一个、第二个等元素,直到找到两个不相等的元素。然后returns这两个元素的比较结果。如果所有元素都相等,则元组相等。
(5, x) < (6, y) returns 无论 x, y 是什么都为真,因为 5 < 6;第一个元素是不同的。
(5, x) < (5, y) returns 与x < y 相同的结果,因为第一个元素相同,所以比较第二个元素。