NSArray + remove item from array

匿名 (未验证) 提交于 2019-12-03 01:59:02

问题:

How to remove an item from NSArray.

回答1:

NSArray is not mutable, that is, you cannot modify it. You should take a look at NSMutableArray. Check out the "Removing Objects" section, you'll find there many functions that allow you to remove items:

[anArray removeObjectAtIndex: index]; [anArray removeObject: item]; [anArray removeLastObject]; 


回答2:

NSMutableArray *arrayThatYouCanRemoveObjects = [NSMutableArray arrayWithArray:your_array];  [arrayThatYouCanRemoveObjects removeObjectAtIndex:your_object_index];  [your_array release];   your_array = [[NSArray arrayWithArray: arrayThatYouCanRemoveObjects] retain]; 

that's about it

if you dont own your_array(i.e it's autoreleased) remove the release & retain messages



回答3:

This category may be to your taste. But! Be frugal with its usage; since we are converting to a NSMutableArray and back again, it's not at all efficient.

@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 


回答4:

Here's a more functional approach using Key-Value Coding:

@implementation NSArray (Additions)  - (instancetype)arrayByRemovingObject:(id)object {     return [self filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF != %@", object]]; }  @end 


回答5:

Remove Object from NSArray with this Method:

-(NSArray *) removeObjectFromArray:(NSArray *) array withIndex:(NSInteger) index {     NSMutableArray *modifyableArray = [[NSMutableArray alloc] initWithArray:array];     [modifyableArray removeObjectAtIndex:index];     return [[NSArray alloc] initWithArray:modifyableArray]; } 


回答6:

Made a category like mxcl, but this is slightly faster.

My testing shows ~15% improvement (I could be wrong, feel free to compare the two yourself).

Basically I take the portion of the array thats in front of the object and the portion behind and combine them. Thus excluding the element.

- (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; } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!