Проблема результата о отсортированном массиве swift - PullRequest
0 голосов
/ 07 января 2019

У меня проблема с сортировкой массива.
Я пытаюсь отсортировать массив, но не получаю ожидаемый результат. Если я хочу отсортировать, когда количество совпадений, они также сортируются по цене.
Что не так с моим подходом?

self.array = items.sorted(by: { (item1, item2) -> Bool in 
                 if item1.count > item2.count {                      
                    return true                  
                 } else {                      
                    if item1.count == item2.count {
                        if item1.price > item2.price {
                            return true
                        }
                    }
                 }              
                return false
             })

это мой результат сортировки:

[Item(name: "AAA", count: 7, price: "30737517", index: 0), 
 Item(name: "EEE", count: 3, price: "8814388", index: 4), 
 Item(name: "CCC", count: 3, price: "12100396", index: 2), 
 Item(name: "DDD", count: 1, price: "9403300", index: 3), 
 Item(name: "FFF", count: 1, price: "5072755", index: 5), 
 Item(name: "BBB", count: 1, price: "21477775", index: 1)]

Когда числа совпадают, я хочу отсортировать массив по цене в порядке убывания.

Ответы [ 2 ]

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

Лексически 10 больше 2, но "10" меньше "2"

Существуют API для числовой сортировки строк

self.array = items.sorted { ($0.count >= $0.count) && $0.price.compare($1.price, options: .numeric) == .orderedAscending }

или

self.array = items.sorted { ($0.count >= $0.count) && $0.price.localizedStandardCompare($1.price) == .orderedAscending }
0 голосов
/ 07 января 2019

Возможно, вы захотите, чтобы ваш price стал Int или Double в вашей структуре или классе, String сравнение сравнивает только первый символ, поэтому "8814388"> "12100396", это преобразование должно работать:

self.array = items.sorted(by: { ($0.count >= $1.count) && (Double($0.price) ?? 0 > Double($1.price) ?? 0) })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...