如何从 NSArray 中删除项目。
问问题
108501 次
7 回答
127
NSArray 是不可变的,也就是说,你不能修改它。你应该看看NSMutableArray。查看“删除对象”部分,您会发现有许多功能可以让您删除项目:
[anArray removeObjectAtIndex: index];
[anArray removeObject: item];
[anArray removeLastObject];
于 2009-11-13T10:51:31.317 回答
24
NSMutableArray *arrayThatYouCanRemoveObjects = [NSMutableArray arrayWithArray:your_array];
[arrayThatYouCanRemoveObjects removeObjectAtIndex:your_object_index];
[your_array release];
your_array = [[NSArray arrayWithArray: arrayThatYouCanRemoveObjects] retain];
就是这样
如果您不拥有 your_array(即它是自动发布的),请删除发布并保留消息
于 2009-11-13T11:37:34.173 回答
20
这个类别可能符合您的口味。但!节俭使用它;因为我们正在转换为 NSMutableArray 并再次转换回来,所以它根本没有效率。
@implementation NSArray (mxcl)
- (NSArray *)arrayByRemovingObject:(id)obj
{
if (!obj) return [self copy]; // copy because all array* methods return new arrays
NSMutableArray *mutableArray = [NSMutableArray arrayWithArray:self];
[mutableArray removeObject:obj];
return [NSArray arrayWithArray:mutableArray];
}
@end
于 2010-11-26T16:09:48.060 回答
18
这是使用键值编码的更实用的方法:
@implementation NSArray (Additions)
- (instancetype)arrayByRemovingObject:(id)object {
return [self filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF != %@", object]];
}
@end
于 2014-05-06T09:35:50.630 回答
4
Object
使用NSArray
此方法删除:
-(NSArray *) removeObjectFromArray:(NSArray *) array withIndex:(NSInteger) index {
NSMutableArray *modifyableArray = [[NSMutableArray alloc] initWithArray:array];
[modifyableArray removeObjectAtIndex:index];
return [[NSArray alloc] initWithArray:modifyableArray];
}
于 2014-10-21T21:38:14.063 回答
3
做了一个像mxcl这样的类,但是这样稍微快一点。
我的测试显示大约 15% 的改进(我可能是错的,您可以自己比较两者)。
基本上,我将对象前面的数组部分和后面的部分组合起来。从而排除元素。
- (NSArray *)prefix_arrayByRemovingObject:(id)object
{
if (!object) {
return self;
}
NSUInteger indexOfObject = [self indexOfObject:object];
NSArray *firstSubArray = [self subarrayWithRange:NSMakeRange(0, indexOfObject)];
NSArray *secondSubArray = [self subarrayWithRange:NSMakeRange(indexOfObject + 1, self.count - indexOfObject - 1)];
NSArray *newArray = [firstSubArray arrayByAddingObjectsFromArray:secondSubArray];
return newArray;
}
于 2013-12-11T21:03:23.960 回答
0
正如其他人所建议的那样,NSMutableArray 有这样做的方法,但有时你被迫使用 NSArray,我会使用:
NSArray* newArray = [oldArray subarrayWithRange:NSMakeRange(1, [oldArray count] - 1)];
这样,oldArray 将保持原样,但将创建一个 newArray 并删除第一个项目。
于 2019-04-19T15:34:43.913 回答