gpt4 book ai didi

arrays - 在 iOS 中将包含范围的数组排序为字符串

转载 作者:搜寻专家 更新时间:2023-10-31 22:18:03 25 4
gpt4 key购买 nike

我在 sqlite 数据库中有一行数据,格式如下面的屏幕截图所示。

enter image description here

我已将所有这些值作为字符串存储在一个数组中。现在,我必须对数组中的对象进行排序,以便结果如下并将其显示在 TableView 中。

<10 厘米

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。

  • 对于 <10 厘米和 >700 厘米的值,我必须单独处理。可能是,通过在数组排序后将这些值插入到第一个索引和最后一个索引中,尚未尝试。

  • 数组排序后,再次以正确的格式打印值,这是我在上面的示例代码中使用 for 循环完成的。

该方法似乎需要在大量时间消耗和操作之间进行权衡。不知道如果有100行这样的数据,性能会如何。

我的问题是,在 iOS 中是否有更好、更简洁的方法对范围格式的数据进行排序?

非常感谢任何帮助。

最佳答案

此解决方案检查字符串的第一个字符。如果它可以转换为 Int,则使用整个字符串,如果不能,则删除第一个字符并使用它。然后使用选项 numeric

执行常规 compare 排序
let arr = ["240 - 300 cm", "400 - 600 cm ", "90 - 130 cm", "<10 cm", ">700 cm"]

let arr1 = arr.sorted { (str1, str2) -> Bool in
let lhs = Int(str1.prefix(1)) == nil ? String(str1.dropFirst()) : str1
let rhs = Int(str2.prefix(1)) == nil ? String(str2.dropFirst()) : str2
return rhs.compare(lhs, options: .numeric) == .orderedDescending
}

print(arr1)

关于arrays - 在 iOS 中将包含范围的数组排序为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49994771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com