You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何按自定义规则(如埃及象形文字顺序)排序字符串?

Swift 实现自定义字符顺序排序(古埃及象形文字《Manuel de Codage》规则)

要实现这种自定义字符顺序的排序,最直接高效的方式是先给每个指定字符分配优先级权重,再基于权重对比字符串。不需要依赖谓词(谓词更适合过滤而非自定义排序),用Swift标准库的排序方法就能搞定,步骤如下:

  • 第一步:构建字符优先级映射
    把规则字符串里的每个字符对应到它的索引位置,索引越小,排序时优先级越高。用字典存储这个映射,方便快速查找:

    let customOrder = "AiyawbpfmnrhHxXzsSqkgtTdD"
    var charPriority: [Character: Int] = [:]
    for (index, char) in customOrder.enumerated() {
        charPriority[char] = index
    }
    
  • 第二步:实现自定义排序逻辑
    利用sorted(by:)方法,遍历两个字符串的字符,逐个对比它们的优先级权重。如果某个字符不在规则里,可以根据需求处理(比如放到最后,或者按默认ASCII顺序,这里示例是放到最后):

    func compareStrings(_ a: String, _ b: String) -> Bool {
        let aChars = Array(a)
        let bChars = Array(b)
        
        let minLength = min(aChars.count, bChars.count)
        
        for i in 0..<minLength {
            let charA = aChars[i]
            let charB = bChars[i]
            
            guard let priorityA = charPriority[charA], let priorityB = charPriority[charB] else {
                // 处理不在规则里的字符,这里示例是把无优先级的字符放到后面
                if charPriority[charA] == nil && charPriority[charB] != nil {
                    return false
                } else if charPriority[charA] != nil && charPriority[charB] == nil {
                    return true
                } else {
                    // 都不在规则里,按默认ASCII顺序
                    return charA < charB
                }
            }
            
            if priorityA != priorityB {
                return priorityA < priorityB
            }
        }
        
        // 前面字符都相同,短字符串排前面
        return aChars.count < bChars.count
    }
    
    // 使用示例
    let stringsToSort = ["a", "A", "y", "b", "H", "x"]
    let sortedStrings = stringsToSort.sorted(by: compareStrings)
    print(sortedStrings) // 输出: ["A", "y", "a", "b", "H", "x"]
    
  • 补充说明
    如果你的字符串都是由规则里的字符组成,那可以去掉处理无优先级字符的逻辑,让代码更简洁。另外,这种方式比每次排序时遍历规则字符串查找字符位置高效得多,因为字典的查找是O(1)时间复杂度。

内容的提问来源于stack exchange,提问作者BlueskyMed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:25:19