ios - swift : How to sort alphabetically but with letters first

标签 ios swift sorting realm

我有一个 Realm 结果列表:

subsList = RealmDB.objects(Downloads).filter("isActive = true").sorted("name", ascending: true)

它显示排序的结果,但第一个结果是“(item 1)”或 1-item,然后是 A-item、B-item 等...

我如何以 A 项、B 项等先行(第 1 项)、第 1 项显示在最后的方式对其进行排序?

注意:对于那些不了解realm的人,可以使用NSPredicate进行排序

谢谢大家

编辑: 根据评论,我得到了

-chloro
(+-)-1,2,3-octa
(amino)
1-propanol
acetone
benzin
dinoterb
TNT

我需要

acetone
benzin
dinoterb
TNT
-chloro
(+-)-1,2,3-octa
(amino)
1-propanol

最佳答案

这只是一个示例,请修复代码以使其看起来更好。

var arr = ["-chloro", "(+-)-1,2,3-octa", "(amino)", "1-propanol", "acetone", "benzin","dinoterb","TNT"]

func matches(for regex: String, in text: String) -> [String] {

    do {
        let regex = try NSRegularExpression(pattern: regex)
        let nsString = text as NSString
        let results = regex.matches(in: text, range: NSRange(location: 0,     length: nsString.length))
        return results.map { nsString.substring(with: $0.range)}
    } catch let error {
        print("invalid regex: \(error.localizedDescription)")
        return []
    }
}


arr.sort { (s1, s2) -> Bool in
    let matched = matches(for: "[0-9,\\(,\\-]", in: s1)
    let matched2 = matches(for: "[0-9\\(,\\-]", in: s2)
    if matched.isEmpty && matched2.isEmpty {
        return s1.lowercased() < s2.lowercased()
    } else if matched.isEmpty && !matched2.isEmpty {
        return true
    } else if !matched.isEmpty && matched2.isEmpty {
        return false
    } else {
        return matched.first! < matched2.first!
    }
}

结果 -> ["丙酮", "苯甲酸", "dinoterb", "TNT", "(+-)-1,2,3-octa", "(氨基)", "-氯", "1-丙醇"]

关于ios - swift : How to sort alphabetically but with letters first,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41062669/

相关文章:

ios - 为什么 viewDidLayoutSubviews 会干扰动画?

ios - gapi.client.load ('youtube' , 'v3' ) 不适用于 ios 使用 phonegap

ios - 具有多个参数的函数的选择器

algorithm - 大O算法-排序

IOS Firebase,iOS 的什么数据类型相当于字段 "map"??

ios - 使用 iOS 应用程序将照片存储在 mysql 数据库中

ios - 影响随机产卵

ios - 如何将同步post请求转换为异步post请求?

java - TreeMap<int[],Double> 初始化并按值排序

python - numpy从上到下排序