首页 > 解决方案 > 如何从 Swift3 iOS 中的对象数组中找到唯一值

问题描述

我已经声明了一个Array赞:

  var sessionsToDisplayTemp : [SessionData] = []

的值为sessionsToDisplayTemp

[<SessionData: 0x600001c16a30> (entity: SessionData; id: 0x8b2a8ba144e57f29 <x-coredata://0A752C13-D33E-4AE2-BE3E-7B856C0EE8D9/SessionData/p3> ; data: {

    startTime = "14:30";
    switchInGroup = FALSE;

}), <SessionData: 0x600001c16a80> (entity: SessionData; id: 0x8b2a8ba144f97f29 <x-coredata://0A752C13-D33E-4AE2-BE3E-7B856C0EE8D9/SessionData/p4> ; data: {

    startTime = "13:30";
    switchInGroup = TRUE;

}), <SessionData: 0x600001c16cb0> (entity: SessionData; id: 0x8b2a8ba144fd7f29 <x-coredata://0A752C13-D33E-4AE2-BE3E-7B856C0EE8D9/SessionData/p5> ; data: {
        startTime = "13:30";
    switchInGroup = FALSE;

})]

我的问题是我必须检查开始时间,如果开始时间相同,那么必须从这个数组中隐藏,这个数组应该按照开始时间的顺序。我的意思是最终的数组应该是:

[<SessionData: 0x600001c16a30> (entity: SessionData; id: 0x8b2a8ba144e57f29 <x-coredata://0A752C13-D33E-4AE2-BE3E-7B856C0EE8D9/SessionData/p3> ; data: {

        startTime = "13:30";
        switchInGroup = TRUE;

    }), <SessionData: 0x600001c16a80> (entity: SessionData; id: 0x8b2a8ba144f97f29 <x-coredata://0A752C13-D33E-4AE2-BE3E-7B856C0EE8D9/SessionData/p4> ; data: {

        startTime = "14:30";
        switchInGroup = FALSE;

    })]

我已经使用以下方法根据开始时间完成了上升部分:

sessionsToDisplayTemp.sort(by: { $0.startTime?.compare(($1.startTime)!) == .orderedAscending })

任何人都可以帮助我实现这一目标。谢谢你。

标签: iosarraysswiftsorting

解决方案


out这将创建一个已排序且没有重复的数组

var out = [SessionData]()
for data in sessionsToDisplayTemp.sorted(by: { $0.startTime < $1.startTime}) {
    if out.isEmpty {
        out.append(data)
    } else if let last = out.last, last.startTime != data.startTime {
        out.append(data)
    }
} 

推荐阅读