2011-07-13 42 views
4

对于在Objective-C中如何处理数组,我感到有点困惑。 如果我有作为如何更改NSArray中的元素?

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

这样的一个数组我如何更改的第一次出现,以“Y”?

回答

9

你需要一个NSMutableArray ..

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

然后

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

谢谢你的回答。非常感谢。 – Namhcir

5

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

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

非常感谢您的快速响应! – Namhcir

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

你甚至可以添加这个作为一个类别,并让它很容易获得。