【发布时间】:2018-10-04 07:22:20
【问题描述】:
我在 sqlite 数据库中有一行范围格式的数据,如下面的屏幕截图所示。
我已将所有这些值作为字符串存储在一个数组中。现在,我必须对数组中的对象进行排序,以便结果如下所示并在表格视图中显示。
90 - 130 厘米
240 - 300 厘米
400 - 600 厘米
'>700 厘米
我已经尝试了一些代码。
示例代码 1:
var arr = ["240 - 300 cm", "400 - 600 cm ", "90 - 130 cm", "<10 cm", ">700 cm"]
var arr1 = arr.sorted{$0 < $1}
但是,这种方法似乎适用于带有字母数字字符的字符串。所以,我尝试了另一种方法。
示例代码 2:
var arr1 = [NSValue.init(range: NSMakeRange(240, 300)), NSValue.init(range: NSMakeRange(400, 600)), NSValue.init(range: NSMakeRange(90, 130))]
var arr2 = arr1.sorted{$0.rangeValue.location < $1.rangeValue.location}
for range in arr2 {
print("\(range.rangeValue.location) - \(range.rangeValue.length) cm")
}
但是,要使这种方法起作用,我必须执行以下操作:
根据要求以格式(例如 90 - 130 厘米)处理数据,以便我可以将其混合以适应 NSRange。
对于像 700 cm 这样的值,我必须单独处理。可能是,通过在数组排序后将这些值插入到第一个索引和最后一个索引中,尚未尝试。
数组排序后,再次以我在上面示例代码中使用 for 循环完成的正确格式打印值。
这种方法似乎在权衡大量时间消耗和操作。我不知道如果有 100 行这样的数据,性能会如何。
我的问题是,有没有更好更简洁的方法来在 iOS 中对范围格式的数据进行排序?
非常感谢任何帮助。
【问题讨论】:
-
问题:如果字符串以“总是的第一个元素? ">" 一样,是不是表示它应该是总是排序数组中的最后一个元素?
-
是的@Ahmad F,我查看了更多此类范围数据的样本,我很确定在小于 () 运算符之后不会有任何数据.它们代表列表的最小和最大限制。
标签: arrays swift string sorting