Быстрая сортировка массива структур по строке double - PullRequest
1 голос
/ 02 апреля 2019

У меня есть массив структур, которые я хочу отсортировать от высшего к низшему на основе значения Double, хранящегося в виде строки.Вот как я сейчас это делаю:

users.sort { (lhs, rhs) in return lhs.weekFTC > rhs.weekFTC }

Это возвращает заказ на основе первого числа, а не полного числа.Есть ли лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2019

Вы можете преобразовать строку weekFTC в Double и затем сравнить, например, так:

users.sort { (lhs, rhs) -> Bool in
    let lhsVal = Double(lhs.weekFTC) ?? 0
    let rhsVal = Double(rhs.weekFTC) ?? 0

    return lhsVal > rhsVal
}

Прямое сравнение строк выполняет лексикографическое сравнение.

Пример:

var array = ["111", "e3", "22"]

array.sort { (lhs, rhs) -> Bool in
    return lhs > rhs
}
print(array) //["e3", "22", "111"]

Итак, мы должны посмотреть, можно ли преобразовать строку в число, и затем отсортировать.
На этот раз будет выполнено числовое сравнение, например:

var array = ["111", "e3", "22"]

array.sort { (lhs, rhs) -> Bool in
    let lhs = Double(lhs) ?? 0
    let rhs = Double(rhs) ?? 0
    return lhs > rhs
}
print(array) //["111", "22", "e3"]
1 голос
/ 02 апреля 2019

Используйте компаратор, который может обрабатывать числовые строки

users.sort { $0.weekFTC.compare($1.weekFTC, options: .numeric) == .orderedDescending }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...