我遇到数组排序问题。
我正在尝试对数组进行排序,但是没有得到预期的结果。
如果我想在计数相同时进行排序,它们也会按价格进行排序。
我的方法怎么了?
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)]
当计数相同时,我想按价格降序对数组进行排序。
答案 0 :(得分:0)
您可能希望使自己的price
成为结构或类中的Int
或Double
,String
比较仅比较第一个字符,因此“ 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 }