Будет ли массив массивов Swift 4, встроенный в методы «min ()» и «max ()» работать с массивом строк? - PullRequest
0 голосов
/ 07 февраля 2019

Ниже приведен код игровой площадки, который берет строку и разбивает ее на основе пустых пространств и создает массив.На основании чего функция вычисляет минимальное и максимальное значения в массиве строк.Это длина строки?Я ожидаю результат, основанный на длине строки.Поправьте меня, если это не ожидаемое поведение.

let testString = "swim switch swill swift"
let wordArray = testString.components(separatedBy: " ")
let first = wordArray.min()!

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Он основан не только на длине строки.

Если вы введете команду + щелкните по слову min, а затем нажмите «Перейти к определению», вы увидите, что оно объявлено с расширением * 1004.*:

extension Array where Element : Comparable {
    ...

Это говорит о том, что при сравнении элементов, вероятно, используются < и >, поскольку эти операторы требуются для Comparable.

Следовательно,метод min вернет «наименьшую» строку на основе сравнения с оператором <.

Как тогда оператор < работает со строками?

Все они оцениваются какtrue:

"s" < "ss"
"a" < "b"
"ab" < "b"

Что предполагает, что сначала сравниваются буквы по алфавиту, а затем по длине.Другими словами, он работает как словарь (как в реальном словаре со словами и их значениями, а не структурой данных).Метод min вернет слово, которое появится первым в словаре.

0 голосов
/ 07 февраля 2019

Он принимает мин и макс, но работает в в алфавитном порядке .

import UIKit
let testString = "s ab dfc rtgf"
let wordArray = testString.components(separatedBy: " ")
let first = wordArray.min()! // prints ab
let second = wordArray.max()! // prints s
...