0

几天来,我一直在使用NSArrays 和NSMutableArrays 来存储对象。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];
  }

有没有更好的方法来做到这一点?也许是另一种数据结构?还是更简单的功能?

4

2 回答 2

0

您应该使用您尝试过的第一种方法:

[listOfDates removeObject:date1];

这将从中删除 date1 和 ONLY date1 listOfDates。这不应该删除所有 NSDate 对象,listOfDates除非所有 NSDate 对象listOfDates都是date1.

您也可以使用 removeObjectAtIndex: 结合 indexOfObject: 来产生相同的效果,但这是额外的代码。

来自NSMutableArray 类removeObject参考:

此方法使用 indexOfObject: 定位匹配项,然后使用 removeObjectAtIndex: 将其删除。因此,匹配是根据对象对 isEqual: 消息的响应来确定的。如果数组不包含对象,则该方法无效(尽管它确实会产生搜索内容的开销)。

于 2012-06-20T21:21:57.277 回答
0

如果 dateList 中的所有日期都相等,removeObject则不会只删除一个,而是全部删除。要仅删除一个,较短的版本是获取第一个索引,然后删除该索引处的对象:

NSUInteger indexToRemove = [dateList indexOfObject:dateToRemove];
if (indexToRemove != NSNotFound) {
    [dateList removeObjectAtIndex:indexToRemove];
}
于 2012-06-20T21:29:27.180 回答