Как вы меняете элементы в NSArray? - PullRequest
4 голосов
/ 14 июля 2011

Я немного озадачен тем, как обрабатываются массивы в Objective-C.Если у меня есть массив, такой как

NSarray *myArray = [[NSArray alloc]
                                  initWithObjects:@"N", @"N", @"N", @"N", @"N",
                                  nil];

, как мне изменить первое вхождение на «Y»?

Ответы [ 3 ]

9 голосов
/ 14 июля 2011

Вам нужен NSMutableArray ..

NSMutableArray *myArray = [[NSMutableArray alloc]
                                  initWithObjects:@"N", @"N", @"N", @"N", @"N",
                                  nil];

, а затем

[myArray replaceObjectAtIndex:0 withObject:@"Y"];
5 голосов
/ 14 июля 2011

Вы не можете, потому что NSArray является неизменным. Но если вместо этого вы используете NSMutableArray, то можете. См replaceObjectAtIndex:withObject::

[myArray replaceObjectAtIndex:0 withObject:@"Y"]
4 голосов
/ 03 декабря 2013

Написать вспомогательный метод

-(NSArray *)replaceObjectAtIndex:(int)index inArray:(NSArray *)array withObject:(id)object {
    NSMutableArray *mutableArray = [array mutableCopy];
    mutableArray[index] = object;
    return [NSArray arrayWithArray:mutableArray];
}

Теперь вы можете проверить этот метод с помощью

NSArray *arr = @[@"a", @"b", @"c"];
arr = [self replaceObjectAtIndex:1 inArray:arr withObject:@"d"];
logObject(arr);

Это выводит

arr = (
    a,
    d,
    c
)

Вы можете использовать аналогичный метод для NSDictionary

-(NSDictionary *)replaceObjectWithKey:(id)key inDictionary:(NSDictionary *)dict withObject:(id)object {
    NSMutableDictionary *mutableDict = [dict mutableCopy];
    mutableDict[key] = object;
    return [NSDictionary dictionaryWithDictionary:mutableDict];
}

Вы можете проверить это с помощью

NSDictionary *dict = @{@"name": @"Albert", @"salary": @3500};
dict = [self replaceObjectWithKey:@"salary" inDictionary:dict withObject:@4400];
logObject(dict);

который выводит

dict = {
    name = Albert;
    salary = 4400;
}

Вы даже можете добавить это как категорию и сделать ее легко доступной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...