Подтвердить что ты не робот

NSArray + удалить элемент из массива

Как удалить элемент из NSArray.

4b9b3361

Ответ 1

NSArray не изменен, т.е. вы не можете его изменить. Вы должны взглянуть на NSMutableArray. Просмотрите раздел "Удаление объектов", вы найдете там множество функций, которые позволяют удалять элементы:

[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];

что об этом

если вы не владеете свой_рисой (то есть он автореализован) удалите выпуск и сохраните сообщения

Ответ 3

Эта категория может быть на ваш вкус. Но! Будьте осторожны с его использованием; поскольку мы конвертируем в 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

Ответ 4

Здесь более функциональный подход с использованием кодирования с ключом:

@implementation NSArray (Additions)

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

@end

Ответ 5

Удалите Object из NSArray с помощью этого метода:

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

Ответ 6

Создал такую ​​категорию, как 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;
}

Ответ 7

Как и предполагали другие, NSMutableArray имеет методы для этого, но иногда вы вынуждены использовать NSArray, я бы использовал:

NSArray* newArray = [oldArray subarrayWithRange:NSMakeRange(1, [oldArray count] - 1)];

Таким образом, oldArray остается прежним, но newArray будет создан с первым удаленным элементом.