在Swift 4中对Struct数组进行排序 [英] Sorting Struct array in Swift 4

查看:70
本文介绍了在Swift 4中对Struct数组进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有下面的 struct ,并希望通过 startTime 字段对会话中的项目进行排序.我完全不知道该怎么做.

I've got the below struct and would like to sort the items within sessions by startTime field. I'm completely lost on how to do this.

我尝试过:

let sortedArray = sessionsData?.items.sorted{ ($0["startTime"] as! String) < ($1["startTime"] as! String) }

但这只是给我一个关于没有下标成员的错误?

but that just gives me an error about no subscript members?

任何指针都将不胜感激,谢谢.

Any pointers would really be appreciated, thank you.

public struct sessions: Decodable {
  let status: String?
  let start: Int?
  let count: Int?
  let items: [sessionInfo]?
  let itemsCount: Int?
  let multipart: Bool?
  let startTime: Int?
  let endTime: Int?
}


public struct sessionInfo: Decodable {
  let name: String?
  let datalist: String?
  let sessionType: Int?
  let status: Int?
  let backupType: Int?
  let startTime: Int?
  let endTime: Int?
  let owner: String?
  let numOfErrors: Int?
  let numOfWarnings: Int?
  let flags: Int?
}

我尝试了以下操作,但收到错误消息:

I tried the below, but get an error:

var sortedArray = sessionsData?.items?.sorted(by: { (lhs, rhs) -> Bool in
        return lhs.startTime < rhs.startTime
    })

错误:

Binary operator '<' cannot be applied to two 'Int?' operands

推荐答案

尝试下面的代码,它以asc顺序对结构进行排序,但是将nil时间戳推到底部.如果您希望nil时间戳位于顶部,请在下面的代码中进行所有nil的检查,以返回与我在下面的代码中返回的结果相反的结果.

Try below code, it sorts the struct in asc order but it pushes nil timestamps to bottom. if you want nil timestamps to be at top, make all nil checks in below code to return opposite of what i return in below code.

var sortedArray = sessionsData?.items?.sorted(by: { (lhs, rhs) -> Bool in

if let lhsTime = lhs.startTime, let rhsTime = rhs.startTime {
    return lhs.startTime < rhs.startTime
}

if lhs.startTime == nil && rhs.startTime == nil {
    // return true to stay at top
    return false
}

if lhs.startTime == nil {
    // return true to stay at top
    return false
}

if rhs.startTime == nil {
    // return false to stay at top
    return true
}

})

这篇关于在Swift 4中对Struct数组进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆