Swift 快速元组比较

Swift 快速元组比较,swift,tuples,comparison,Swift,Tuples,Comparison,有人能告诉我们,为什么在类似的情况下Xcode返回:在第一种情况下为true,在第二种情况下为false? 这是一个元组比较。首先它比较整数,但它如何比较字符串 (5, "life") < (5, "lifiee")// true (99, "life") < (99, "death")// false (5,“生活”)“d” 字符串比较逐字母进行,直到字母不相等或一个字符串结束。例如: “a”

有人能告诉我们,为什么在类似的情况下Xcode返回:在第一种情况下为true,在第二种情况下为false? 这是一个元组比较。首先它比较整数,但它如何比较字符串

(5, "life") < (5, "lifiee")// true

(99, "life") < (99, "death")// false
(5,“生活”)<(5,“生活”)//正确
(99,“生命”)<(99,“死亡”)//错误

提前感谢您的回答

在这两种情况下,数值相等。
区别在于字符串比较:

  • “生活”是“生活”,因为“e”是“我”
  • “生命”是>“死亡”,因为“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")
99和99是相等的,所以我们跳到下两个值进行比较,即“生”和“死”;因此:

"life" < "lifiee"
"life" < "death"

元组比较比较第一个、第二个等元素,直到找到两个不相等的元素。然后返回这两个元素的比较结果。如果所有元素都相等,则元组相等

(5,x)<(6,y)返回真值,无论x,y是什么,因为5<6;第一个元素是不同的


(5,x)<(5,y)返回与x 那么
(5,“生活”)<(5,“生活”)
如何返回
true
?因为5不小于5。是的,但“生命”小于“lifiee”,因为“e”小于“i”(因为“e”在字母表中比“i”早,所以元组比较使用与否?非常感谢你的回答!现在很清楚了!抱歉,如果这是一个愚蠢的问题…还是一个新手:)元组是根据它们的“词典顺序”进行比较的–另请参见。
"life" < "death"
@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
}