使用替代比较方式对Swift数组进行排序

11

我想使用另一种比较方法(如localizedCompare、caseInsensitiveCompare或localizedCaseInsensitiveCompare)对我的Swift结构体数组进行排序。而Swift标准字符串数组排序函数是将所有大写字母排在小写字母前面。以下是我的代码:

import Foundation

struct DataStruct {

    struct Item {
        let title: String
        let number: Int
    }

        static var items = [
        Item(title: "apple", number: 30),
        Item(title: "Berry", number: 9),
        Item(title: "apple", number: 18)]
}

class DataFunctions {
    func sortItemsArrayTitle() {
        DataStruct.items.sort { $0.title < $1.title }
    }
}

一旦调用上述代码,结果为[Berry, apple, apple]。这是不可接受的。有什么建议吗?


1
DataStruct.items.sort { $0.title.lowercaseString < $1.title.lowercaseString } 数据结构.项目排序 { $0.title.lowercaseString < $1.title.lowercaseString } - Leo Dabus
1个回答

23

您可以通过如下方式比较标题的小写字符串来轻松解决:

DataStruct.items.sort { $0.title.lowercaseString < $1.title.lowercaseString }

使用localizedCompare,代码应该如下:

DataStruct.items.sort { $0.title.localizedCompare($1.title) == .OrderedAscending } 

这个很好用。谢谢。我还发现了 lowercaseStringWithLocal,我也可以研究一下。你能帮忙解释一下如何实现像 localizedCompare 这样的方法吗? - Shane
再次感谢。只需要'返回(return)': DataStruct.items.sort { 返回 $0.title.localizedCompare($1.title) == .OrderedAscending } - Shane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接