簡體   English   中英

不區分大小寫的排序在 Swift 或其他語言中如何工作?

[英]How does case insensitive sort work in Swift or other languages?

因此,我正在從 CoreData 獲取一些數據,並使用NSSortDescriptor對其進行升序排序(我也嘗試過其他方法)。 發生的情況是具有相同文本的小寫字符串首先出現。 根據我的理解,在 ASCII 中,大寫字符串排在第一位('A' 從 65 開始),然后是小寫字符串('a' 從 97 開始),如果我們考慮這一點,按升序排序時,大寫字符串應該排在第一位。

let sortDescriptor = NSSortDescriptor(key: "name", ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:)))

let entities = CoreDataManager.getData(entityName: "Entity", predicate: nil, sortDescriptor: sortDescriptor) as? [Entity]

在我的 CoreDataManager class 中,我有以下方法。

class CoreDataManager: NSObject {

    static func getManagedObject() -> NSManagedObjectContext {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        return appDelegate.managedObjectContext
    }
    
    static func getData(entityName: String, predicate: NSPredicate? = nil, sortDescriptor: NSSortDescriptor? = nil) -> [NSManagedObject] {
        var resultsManagedObject: [NSManagedObject] = []
        do {
            let managedObject = getManagedObject()
            let request = NSFetchRequest<NSFetchRequestResult>(entityName: entityName)
            
            if let descriptor = sortDescriptor {
                request.sortDescriptors = [descriptor]
            }
            
            if predicate != nil {
                request.predicate = predicate
            }
            
            let results = try managedObject.fetch(request)
            resultsManagedObject = results as! [NSManagedObject]
        } catch {
            print("There was an error retrieving data")
        }
        return resultsManagedObject
    }
}

我也嘗試過使用 arrays 的sorted方法進行排序,但這也給出了與使用 NSSortDescriptor 相同的NSSortDescriptor

let arr = ["bamboo", "document", "BAMBOO", "DOCUMENT"]

print(arr.sorted { $0.lowercased() < $1.lowercased() }) // Output ~> ["bamboo", "BAMBOO", "document", "DOCUMENT"]

為什么排序會這樣工作? 其他語言也一樣嗎?

它不是首先對小寫進行排序。 它將大寫和小寫比較為equal 但顯然,在一個數組中,必須先有一些東西 如果排序算法是“穩定的”,那么如果兩個元素比較相等,那么在輸入中首先出現的那個也將首先出現在 output 中。 如果算法“不穩定”,它們可能會以任何隨機順序出現。 看起來你得到了一個穩定的排序(或者只是幸運); 由於您的示例輸入在相應的大寫值之前具有小寫值,因此 output 也是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM