[英]How to find unique value from Array of object in 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 })
谁能帮助我实现这一目标。 谢谢。
这将创建一个数组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)
}
}
您可以创建一个新数组,在其中仅附加具有唯一startTime
的SessionData
对象。 为了简单起见,您可以使用@ Anbu.Karthik在注释中提到的Set
。
作为您的SessionData
的模拟,我使用元组
var sessionToDisplay : [(startTime: String, switchInGroup: Bool)] = [
(startTime: "14:30", switchInGroup: false),
(startTime: "13:30", switchInGroup: true),
(startTime: "13:30", switchInGroup: false),
];
然后,代码将如下所示:
var uniqueTimes = Set<String>();
var newArr : [(startTime: String, switchInGroup: Bool)] = [];
//Add only the objects with unique startTime (first occurrence in original array)
for (st, sig) in sessionToDisplay{
if(uniqueTimes.insert(st).inserted){
newArr.append((st, sig));
}
}
//Sort as you need
newArr.sort(by: { $0.startTime.compare(($1.startTime)) == .orderedAscending });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.