我有一个对象数组,我想订购它。这通常不是一个大问题,但在我的特殊情况下,我想订购字符串值,如:
CAT-1,CAT-2,...... CAT-10
现在CAT-10在CAT-2之前。
我已经发现在这种情况下我可以使用以下方法对字符串值进行排序:
let items = items.sorted {
(s1, s2) -> Bool in return s1.localizedStandardCompare(s2) == .orderedAscending
}
但这只在数组只包含字符串值时才有效。在我的情况下,我想用这样的东西排序:
self.filteredItems.sort{
return $0.position < $1.position
}
但我不知道如何结合上述功能来解决这种特殊的排序顺序?
答案 0 :(得分:1)
请检查:
class Category {
let name: String
init(_ name: String) {
self.name = name
}
}
var catA = Category("CAT-2")
var catB = Category("CAT-10")
var catC = Category("CAT-1")
let items: [Category] = [catA, catB, catC]
let filteredItems: [Category] = items.sorted { (s1, s2) -> Bool in
return s1.name.localizedStandardCompare(s2.name) == .orderedAscending
}
print(filteredItems[0].name, filteredItems[1].name, filteredItems[2].name)
// Output : CAT-1 CAT-2 CAT-10
let sortedBy = items.sorted { (c1, c2) -> Bool in
return c1.name < c2.name
}
print(sortedBy[0].name, sortedBy[1].name, sortedBy[2].name)
// Output : CAT-1 CAT-10 CAT-2