【发布时间】:2018-08-23 07:39:02
【问题描述】:
我有一个这样的对象数组,但有 16 个属性:
class anObject: NSObject {
@objc var number: Int
@objc var name: String
@objc var price: Double
subscript(key: String) -> Any? {
return self.value(forKey: key)
}
}
我可以很容易地对任何属性的数组进行排序,例如:
sortedArray = unsortedArray.sorted(by: { $0.name < $1.name } )
现在我正在对我的数组进行分组,以便我可以用部分和行填充 UITableView。我这样分组:
var groupedArray = Dictionary<String, Array<myObject>>()
for item in myArray {
// Verify each grouping is initialized only once
if groupedArray[item[byProperty] as! String] == nil {
groupedArray[item[byProperty] as! String] = Array<Items>()
}
// Add the item into the correct subarray
groupedArray[item[byProperty] as! String]?.append(item)
}
然后我可以通过这样做对分组数组进行排序:
return groupedArray.sorted { $0.0 < $1.0 }
这很好用,除了我的两个属性是双打。当我对这两个属性进行排序时,Swift 会按字母顺序对组进行排序:
10.5, 11.5, 12, 1.5, 2.0 . . .
而不是数字
1.5, 2.0, 10.5, 11.5, 12 . . .
我已经设法通过检查双打是否太短并在字符串的前面插入一个 0 来填充双打。这样做的原因是它们现在按正确的顺序排序,但最终我将不得不去掉前面的前导 0,这似乎是一个丑陋的解决方案。
鉴于 Doubles 必须用作字符串,我如何正确排序分组数组?
【问题讨论】:
-
字典中的所有键是否都以字符串的形式存储?就像它总是全是字符串整数、双精度数等等?
标签: arrays swift sorting format