繁体   English   中英

Swift:如何按字母顺序排序,但字母优先

[英]Swift : How to sort alphabetically but with letters first

我有一个Realm结果列表:

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

它显示有序的结果,但第一个结果是“(项目1)”或1个项目,然后是A项目,B项目等。

如何以A项,B项等为首,最后显示(项1),1项的方式对它进行排序?

注意:对于不了解领域的人,可以使用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-辛基”,“(氨基)”,“-氯”,“ 1-丙醇” “]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM