【发布时间】:2015-05-09 04:42:39
【问题描述】:
该数组包含以下字典。
NSArray *availableSlots = @[@{@"start" : <NSDate obj> , @"end" : <NSDate obj>},
@{@"start" : <NSDate obj> , @"end" : <NSDate obj>},
@{@"start" : <NSDate obj> , @"end" : <NSDate obj>},
@{@"start" : <NSDate obj> , @"end" : <NSDate obj>} ...];
我想获得与所选日期最近的开始日期和结束日期。
这里是这个解决方案的 js Pseudocode 函数。我想把它转换成Objective C。
function sortByProximityToPoint(a, b) {
if (a.proximToPoint === undefined) {
if (pointInTime.diff(a.start, 'minute') >= 0 &&
pointInTime.diff(a.end, 'minute') <= 0) {
a.proximToPoint = 0;
} else if (pointInTime.diff(a.end, 'minute') > 0) {
a.proximToPoint = Math.abs(pointInTime.diff(a.end, 'minute'));
} else {
a.proximToPoint = Math.abs(pointInTime.diff(a.start, 'minute'));
}
}
if (b.proximToPoint === undefined) {
if (pointInTime.diff(b.start, 'minute') >= 0 &&
pointInTime.diff(b.end, 'minute') <= 0) {
b.proximToPoint = 0;
} else if (pointInTime.diff(b.end, 'minute') > 0) {
b.proximToPoint = Math.abs(pointInTime.diff(b.end, 'minute'));
} else {
b.proximToPoint = Math.abs(pointInTime.diff(b.start, 'minute'));
}
}
if (a.proximToPoint < b.proximToPoint) {
return -1;
}
if (a.proximToPoint > b.proximToPoint) {
return 1;
}
return 0;
}
availableSlots.sort(sortByProximityToPoint);
【问题讨论】:
-
NSDate提供了比较和差异的方法,(Objective-)C中有abs函数,你到底有什么问题? -
我想获取pointInTime(选定日期)最近的可用插槽。
-
明白了,你甚至有一些代码可以做到这一点。转换到 Objective-C 时,你在哪里卡住了? (您可以编辑问题以显示这一点。)
-
问题:开始/结束的一对值可以与另一个相交吗?您是否需要找到恰好在开始/结束对值范围内的开始/结束对?与日期相比,开始/结束对值是否可以在过去或需要在将来?你真的需要排序,还是只找到最接近的几个值?
-
@Larne - 好问题,但是由于提供了比较功能(只是在伪代码中)并且它是合理的,所以我们不需要问。 (任务似乎类似于在给定客户请求的现场时间的情况下找到最佳的可用预约时间,并且无论有单个或多个预约流[例如多个医生/理发师/等],它都有效)
标签: ios objective-c sorting nsarray nsdate