你如何改变NSArray中的元素?

时间:2011-07-13 21:20:37

标签: objective-c nsarray

我对如何在Objective-C中处理数组感到困惑。 如果我有一个像

这样的数组
NSarray *myArray = [[NSArray alloc]
                                  initWithObjects:@"N", @"N", @"N", @"N", @"N",
                                  nil];

如何将第一个匹配项更改为“Y”?

3 个答案:

答案 0 :(得分:9)

你需要一个NSMutableArray ..

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

然后

[myArray replaceObjectAtIndex:0 withObject:@"Y"];

答案 1 :(得分:5)

你不能,因为NSArray是不可变的。但是,如果您使用NSMutableArray代替,那么您可以。见replaceObjectAtIndex:withObject:

[myArray replaceObjectAtIndex:0 withObject:@"Y"]

答案 2 :(得分:4)

编写辅助方法

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

您甚至可以将其添加为类别并轻松使用。