Ios 如何在swift 4中对字典数组进行排序

Ios 如何在swift 4中对字典数组进行排序,ios,arrays,swift,dictionary,swift4,Ios,Arrays,Swift,Dictionary,Swift4,这是我的NSObject类 class CustomDate: NSObject { var quarter: Int! var day: String! var month: String! var db: String! var long: String! var unix: Int! init(quarter: Int, day: String, month: String, db: String, long: String, un

这是我的NSObject类

class CustomDate: NSObject {
    var quarter: Int!
    var day: String!
    var month: String!
    var db: String!
    var long: String!
    var unix: Int!

    init(quarter: Int, day: String, month: String, db: String, long: String, unix: Int) {
        super.init()

        self.quarter = quarter
        self.day = day
        self.month = month
        self.db = db
        self.long = long
        self.unix = unix
    }
}
我创建用于存储CustomDate的变量

var dates = [CustomDate]()
我从一个字典中的json中获得了6个键值对的数据,正如你所看到的,下面的照片正在打印日期和月份。但我需要按升序(或降序)对json数据进行排序。这是我的代码。我使用alamofire获取数据,并创建一个NSObject类来存储数据

func apiData() {
    Alamofire.request("https://api.lrs.org/random-date-generator?lim_quarters=40&source=api-docs", method: .get, parameters: nil, encoding: URLEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in

        switch(response.result) {
        case .success(_):
            guard let json = response.result.value as? [String: Any] else { return }
            guard let data = json["data"] as? [String: Any] else { return }

            for (_, value) in data {
                let dateValue = value as! [String: Any]
                let date = CustomDate(quarter: dateValue["quarter"] as! Int,
                                      day: dateValue["day"] as! String,
                                      month: dateValue["month"] as! String,
                                      db: dateValue["db"] as! String,
                                      long: dateValue["long"] as! String,
                                      unix: dateValue["unix"] as! Int)

                self.dates.append(date)
            }
            print(self.dates)
            break
        case .failure(_):
            print(response.result.error as Any)
            break
        }
    }
}
func-apiData(){
Alamofire.request(“https://api.lrs.org/random-date-generator?lim_quarters=40&source=api-docs”,方法:.get,参数:nil,编码:URLEncoding.default,头:nil).responseJSON{(响应:DataResponse)in
开关(response.result){
成功案例:
guard let json=response.result.value为?[String:Any]else{return}
guard let data=json[“data”]as?[String:Any]else{return}
对于数据中的(_,值){
让dateValue=值为![字符串:任意]
让日期=自定义日期(季度:日期值[“季度”]as!Int,
day:dateValue[“day”]作为!字符串,
月:日期值[“月”]为!字符串,
db:dateValue[“db”]作为!字符串,
long:dateValue[“long”]作为!字符串,
unix:dateValue[“unix”]as!Int)
self.dates.append(日期)
}
打印(自打印日期)
打破
案例.失败(uu):
打印(response.result.error,如有)
打破
}
}
}
比如照片


您可以按此对自定义数组进行排序。排序是用于对自定义数组进行排序的高阶函数之一

func apiData() {

    Alamofire.request("https://api.lrs.org/random-date-generator?lim_quarters=40&source=api-docs", method: .get, parameters: nil, encoding: URLEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in

        switch(response.result) {
        case .success(_):
            guard let json = response.result.value as? [String: Any] else { return }
            guard let data = json["data"] as? [String: Any] else { return }

            for (_, value) in data {
                let dateValue = value as! [String: Any]
                let date = CustomDate(quarter: dateValue["quarter"] as! Int,
                                      day: dateValue["day"] as! String,
                                      month: dateValue["month"] as! String,
                                      db: dateValue["db"] as! String,
                                      long: dateValue["long"] as! String,
                                      unix: dateValue["unix"] as! Int)

                self.dates.append(date)
            }
            print("unsorted array \(self.dates.map({$0.month})))")
            self.dates = self.dates.sorted(by: { (objModel, objModel1) -> Bool in return
                (Int(objModel.month ?? "0") ?? 0) < (Int(objModel1.month ?? "0") ?? 0)
            })
            print("sorted array \(self.dates.map({$0.month}))")
            break
        case .failure(_):
            print(response.result.error as Any)
            break
        }
    }
}
func-apiData(){

Alamofire.request(“https://api.lrs.org/random-date-generator?lim_quarters=40&source=api-docs”,方法:.get,参数:nil,编码:URLEncoding.default,标题:nil).responseJSON{(response:DataResponse

若要按数字顺序比较字符串,请使用排序与Finder类似的
localizedStandardCompare

dates.sort(by: {$0.month.localizedStandardCompare($1.month) == .orderedAscending})
或将
与选项数值

dates.sort(by: {$0.month.compare($1.month, options: .numeric) == .orderedAscending})


最好的解决方案可能是将
month
声明为
Int

哪个值需要排序?months值我需要排序当在自定义类中使用sort函数在monthh排序时,我如何才能做到这一点,先生?这是您的代码,让newArr=dates。排序方式:{(objModel,objModel1)->Bool作为回报(Int(objModel.month???“0”)?0<(Int(objModel1.month???“0”)?0})我在这里得到的值为零…我将此代码放在viewdidLoad方法中打印(self.dates)后您是否尝试过此方法语句?是的,它显示错误定义与以前的值冲突等待,让我试试here@viper它在这里工作的很好。我用了同样的东西让我把截图放在这里,如果你比较字符串输出是不需要的,因为它比较ASCIIvalue@chiragshah相信我,这是需要的。在ASCII中,“10”小于“2”@vadian但如果我有“1”、“12”、“2”值,然后像“1”、“12”和“2”一样排序,这与它的排序不太一样。@chiragshah我认为OP想要分段控件的操作中的顺序
“1”、“2”、“12”
,您必须通过适当的属性对数组重新排序。