Как отсортировать массив строк по длине в обратном / нисходящем порядке в Swift? - PullRequest
0 голосов
/ 01 апреля 2020

Я бы хотел упорядочить коллекцию строк в порядке убывания в соответствии с длиной.

Во-первых, я не уверен, должен ли я использовать набор или массив, учитывая, что набор является коллекция неупорядоченных вещей, и мне не нужно, чтобы элементы в коллекции были обязательно в упорядоченной коллекции.

Я наткнулся на метод sorted() и метод sorted(by:), но не могу понять, как сделать по убыванию по длине - просто по алфавиту.

let strings: Set = ["andy", "ber", "ed", "gerald"]
let descendingStrings = strings.sorted(by: >)
print(descendingStrings)

Ответы [ 2 ]

5 голосов
/ 01 апреля 2020

sorted() для сравнения выполняет замыкание (оператор > является замыканием, поскольку все методы являются замыканиями). Итак:

let descendingStrings = strings.sorted { $0.count > $1.count }
1 голос
/ 01 апреля 2020

Если вы просто хотите упорядочить коллекцию строк в порядке убывания, в соответствии с длиной, вы можете написать:

let descendingStrings = strings.sorted { (a, b) -> Bool in
    return a.count > b.count
} 

И если вы хотите сначала самую длинную строку и отсортировать остальные по возрастанию, тогда

let descendingStrings = strings.sorted { (a, b) -> Bool in
    if a.count == b.count {
        return a < b
    } else {
        return a.count > b.count
    }
}

Измените знаки < и > в соответствии с вашими потребностями. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...