繁体   English   中英

按每个成员对结构数组排序

[英]Sort array of structs by a member of each

我正在使用以下结构编译数据:

struct Nursing {

var leftTime: Double
var rightTime: Double
var submissionTime: Date

}

struct Bottle {

var bottleQuantity: Double
var bottleUnits: String
var submissionTime: Date

}

struct Puree {

var pureeQuantity: Double
var pureeType: String
var pureeUnits: String
var submissionTime: Date

}

然后,我使用应用程序其他位置的数据创建每种类型的数组。

var nursingArray = [Nursing]()
var bottleArray = [Bottle]()
var pureeArray = [Puree]()

然后,我仅对最后一天发生的条目过滤每个数组。

let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: Date())
    var todayBottleArray = bottleArray.filter( { ( $0.submissionTime > yesterday! ) } )
    var todayNursingArray = nursingArray.filter( { ( $0.submissionTime > yesterday! ) } )
    var todayPureeArray = pureeArray.filter( { ( $0.submissionTime > yesterday! ) } )

最后,它们全部合并为一个未排序的数组。

    var unsortedTodayArray: [Any] = []

    unsortedTodayArray.append(todayBottleArray)
    unsortedTodayArray.append(todayNursingArray)
    unsortedTodayArray.append(todayPureeArray)

这是一个问题...虽然我知道它们是不相关的,但是submissionTime属性出现在所有三个中。 我如何排序unsortedTodayArray通过submissionTime

您可以使您的结构符合相同的协议。 就像是...

protocol SubmissionTimeable {
    var submissionTime: Date { get set }
}

struct Nursing: SubmissionTimeable {

    var leftTime: Double
    var rightTime: Double
    var submissionTime: Date
}

struct Bottle: SubmissionTimeable {

    var bottleQuantity: Double
    var bottleUnits: String
    var submissionTime: Date
}

struct Puree: SubmissionTimeable {

    var pureeQuantity: Double
    var pureeType: String
    var pureeUnits: String
    var submissionTime: Date
}

然后,让您未排序的数组成为协议的数组。

let unsortedArray = [SubmissionTimeable]()

然后,您可以使用SubmittingTime对该数组进行排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM