我一直在使用NSArray
和NSMutableArray
来存储NSDate
个对象几天。我注意到调用[listOfDates removeObject:date1]
会从数组中删除所有NSDate
个对象。相反,我这样做是为了删除对象:
NSMutableArray *dateList; // Has Dates in it
NSDate *dateToRemove; // Date Object to Remove
__block NSUInteger indexToRemove;
__block BOOL foundMatch = NO;
[dateList enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isEqualToDate:dateToRemove]) {
indexToRemove = idx;
foundMatch = YES;
*stop = YES;
}
}];
if (foundMatch) {
[dateList removeObjectAtIndex:indexToRemove];
}
有更好的方法吗?也许另一种数据结构?还是一个更简单的功能?
答案 0 :(得分:0)
您应该使用您尝试的第一种方法:
[listOfDates removeObject:date1];
这将从listOfDates
中删除date1和ONLY date1。除非listOfDates
中的所有NSDate对象都是listOfDates
,否则不应从date1
中删除所有NSDate对象。
你也可以使用removeObjectAtIndex:结合indexOfObject:产生相同的效果,但这是额外的代码。
来自removeObject
的{{3}}:
此方法使用indexOfObject:来查找匹配项,然后删除 他们通过使用removeObjectAtIndex:。因此,确定匹配 对象对isEqual:消息的响应的基础。如果 array不包含anObject,该方法没有效果(尽管它 确实会产生搜索内容的开销。)
答案 1 :(得分:0)
如果dateList中的所有日期都相同,removeObject
将不会只删除一个日期,而是删除所有日期。要仅删除一个,较短的版本是获取第一个索引,然后删除该索引处的对象:
NSUInteger indexToRemove = [dateList indexOfObject:dateToRemove];
if (indexToRemove != NSNotFound) {
[dateList removeObjectAtIndex:indexToRemove];
}