Быстрое сравнение кортежей - PullRequest
1 голос
/ 10 февраля 2020

Может кто-нибудь сказать, почему в подобных случаях Xcode возвращает: в 1-м случае - true, во 2-м случае - false? Это сравнение кортежей. Сначала сравниваются целые числа, но как сравниваются строки?

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

(99, "life") < (99, "death")// false

Спасибо за ваши ответы заранее!

Ответы [ 3 ]

1 голос
/ 10 февраля 2020

В конце концов, давайте напомним, что для сравнения кортежей они должны иметь:

  • Такое же количество значений.
  • Те же типы.

Исходя из этого, кортежи сравниваются слева направо до тех пор, пока не будет найдено несоответствие.

В первом примере:

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

5 и 5 равны, поэтому мы переходим к следующим двум ценности для сравнения: «жизнь» и «жизнь»; Следовательно:

"life" < "lifiee"

равно true, что означает, что конечный результат равен true.

Во втором примере:

(99, "life") < (99, "death")

99 и 99 равно, поэтому мы переходим к следующим двум значениям для сравнения: «жизнь» и «смерть»; Поэтому:

"life" < "death"

равно false, что означает, что конечный результат равен false.


Для более глубокого изучения процесса сравнения вы можете проверить Операторы сравнения кортежей Предложение:

@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
}
1 голос
/ 10 февраля 2020

Сравнение кортежей сравнивает первое, второе и т. Д. c. элемент, пока он не найдет два элемента, которые не равны. Затем он возвращает результат сравнения для этих двух элементов. Если все элементы равны, то кортежи равны.

(5, x) <(6, y) возвращает true независимо от x, y, потому что 5 <6; Первый элемент отличается. </p>

(5, x) <(5, y) возвращает тот же результат, что и x <y, поскольку первые элементы совпадают, поэтому вторые элементы сравниваются. </p>

0 голосов
/ 10 февраля 2020

В обоих случаях значение цифры c равно.
Разница заключается в сравнении строк:

  • "жизнь" - это "жизнь", потому что "е" - это <" i "</li>
  • " жизнь "это>" смерть ", потому что" l "это>" d "

Сравнение строк работает по буквам, пока буквы не равны или равны единице Строка есть и конец. Например:

  • "a" <"b", потому что "a" в алфавите раньше, чем "b" </li>
  • "a" <"ab", потому что "a" короче "ab" </li>
  • "aa" == "aa"

Итак, для вашего кортежа:

  • {1, "a"} <{2, "a"} => 1 <2 </li>
  • {1, "a"} <{1, "b"} => 1 == 1 && "a" <"b" </li>
...