2011-07-13 61 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; 
} 

你甚至可以添加這個作爲一個類別,並讓它很容易獲得。