快速数组排序结果的问题

时间:2019-01-07 07:20:25

标签: ios arrays swift sorting

我遇到数组排序问题。
我正在尝试对数组进行排序,但是没有得到预期的结果。 如果我想在计数相同时进行排序,它们也会按价格进行排序。
我的方法怎么了?

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 :(得分:0)

您可能希望使自己的price成为结构或类中的IntDoubleString比较仅比较第一个字符,因此“ 8814388”>“ 12100396”,则此转换应有效:

self.array = items.sorted(by: { ($0.count >= $1.count) && (Double($0.price) ?? 0 > Double($1.price) ?? 0) })

答案 1 :(得分:0)

按词法,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 }