Iphone 如何比较NSDates以查找数组中最早和最晚的日期?
确定数组中最早日期和最晚日期的代码有很多问题。以下是我正在使用的代码:Iphone 如何比较NSDates以查找数组中最早和最晚的日期?,iphone,objective-c,nsdate,Iphone,Objective C,Nsdate,确定数组中最早日期和最晚日期的代码有很多问题。以下是我正在使用的代码: NSDate *startDate = nil; // Earliest date NSDate *endDate = nil; // Latest date for (id entry in myArray) { NSDate *date = [entry objectForKey:kDate]; if (startDate == nil && endDate == nil)
NSDate *startDate = nil; // Earliest date
NSDate *endDate = nil; // Latest date
for (id entry in myArray)
{
NSDate *date = [entry objectForKey:kDate];
if (startDate == nil && endDate == nil)
{
startDate = date;
endDate = date;
}
else if ([date compare:endDate] == NSOrderedAscending)
{
startDate = date;
}
else if ([date compare:startDate] == NSOrderedDescending)
{
endDate = date;
}
date = nil;
}
有人能帮我找出哪里出了问题吗?你肯定是在
语句中设置了startDate
和endDate
错误的方向吗?你不想要这个吗:
NSDate *startDate = nil; // Earliest date
NSDate *endDate = nil; // Latest date
for (id entry in myArray)
{
NSDate *date = [entry objectForKey:kDate];
if (startDate == nil && endDate == nil)
{
startDate = date;
endDate = date;
}
if ([date compare:startDate] == NSOrderedAscending)
{
startDate = date;
}
if ([date compare:endDate] == NSOrderedDescending)
{
endDate = date;
}
date = nil;
}
您还可以使用以下方法对NSArray
进行排序NSDates
:
array = [array sortedArrayUsingSelector:@selector(compare:)];
然后在[array firstObject]
将是第一个日期(例如1970-01-01T00:00:00),最后一个对象:[array lastObject]
将是最后一个日期:(例如2011-01-12T00:00:00)您也可以使用预定义的和常量来避免额外检查nil
:
NSDate *startDate = [NSDate distantFuture];
NSDate *endDate = [NSDate distantPast];
for (id entry in myArray)
{
NSDate *date = [entry objectForKey:kDate];
if ([date compare:startDate] == NSOrderedAscending) { startDate = date; }
if ([date compare:endDate] == NSOrderedDescending) { endDate = date; }
date = nil;
}
您还可以使用earlierDate:
和laterDate:
NSDate函数
NSDate *startDate = [NSDate distantFuture];
NSDate *endDate = [NSDate distantPast];
for (id entry in myArray)
{
NSDate *date = [entry objectForKey:kDate];
startDate = [startDate earlierDate:date];
endDate = [endDate laterDate:date];
}
NSDate*startDate=[NSDate distantFuture];
NSDate*endDate=[NSDate distantpass];
for(myArray中的id条目)
{
NSDate*date=[entry objectForKey:kDate];
startDate=[startDate earlierDate:date];
endDate=[endDate laterDate:date];
}
仅针对其他类似问题:valueForKeyPath:
选项非常简洁,我认为:
[myArray valueForKeyPath:@"@min.self"];
[myArray valueForKeyPath:@"@max.self"];
这假设数组中的对象按照您想要的方式实现compare:
方法。例如,我使用它来获取日期数组中最早的日期。如果您想在此处使用它,数组中的对象应该覆盖比较:
方法。使用标准算法来细化数组中的最小/最大值,可以找到最早的日期:
NSMutableArray<NSDate *> *allDates; // dates array
NSDate *earliestDate = allDates.firstObject;
for (NSDate *date in allDates) {
if ([date compare:earliestDate] == NSOrderedAscending) {
earliestDate = date;
}
}
NSMutableArray*allDates;//日期数组
NSDate*earliestDate=allDates.firstObject;
用于(NSDate*所有日期中的日期){
如果([日期比较:earliestDate]==传感器解除扫描){
earliestDate=日期;
}
}
要查找数组中的最新日期,请使用sensorderedescending
而不是sensorderedescending
,因为将date
与endDate
进行比较与将date
与startDate
进行比较的结果没有任何关系,您还必须删除否则。也许两个都要去掉。是的,我完全掩盖了这一点。相应地进行了编辑。请重新考虑,然后将其他重新放入。(date
不能同时在endDate
之后和startDate
之前)