2013-06-13 50 views
0

当前数组类似于NSMutalbeArray ADDOBJECT但覆盖以前的对象

(a, b, c), 

需要改变它们的顺序,如(B,C,A)和(C,A,B),然后将它们添加到一个新的阵列,最终目标是获得像

((a, b, c,), (b, c, a), (c, a, b)) 

代码数组如下:

NSMutableArray * now = [[NSMutableArray alloc] initWithObjects:@"a", @"b", @"c", nil]; 
NSMutableArray * new = [[NSMutableArray alloc] init]; 
[new addObject:now]; 
NSLog(@"...new0: %@", new); 

int n, i; 
for (n = 0; n < 2; n ++) { 
    for (i = 0; i < [now count] - 1; i ++) { 
     [now exchangeObjectAtIndex:i withObjectAtIndex:i+1]; 
    } 
    [new addObject:now]; 
} 
NSLog(@"...new1: %@", new); 

BUT,最终的结果名new1是(C,A,b)OV改写了以前的!我的代码有什么问题?

...new1: (
    (
    c, 
    a, 
    b 
), 
    (
    c, 
    a, 
    b 
), 
    (
    c, 
    a, 
    b 
) 

回答

0

的问题是,你使用相同的阵列现在进行更改。 这导致改变现在存储在新的以前的值。 这可以通过添加现在的副本来解决,如下所示

NSMutableArray * now = [[NSMutableArray alloc] initWithObjects:@"a", @"b", @"c", nil]; 
    NSMutableArray * new = [[NSMutableArray alloc] init]; 
    [new addObject:[now copy]]; 
    NSLog(@"...new0: %@", new); 

    int n, i; 
    for (n = 0; n < 2; n ++) { 
     for (i = 0; i < [now count] - 1; i ++) { 
      [now exchangeObjectAtIndex:i withObjectAtIndex:i+1]; 
     } 
     [new addObject:[now copy]]; 
    } 
    NSLog(@"...new1: %@", new); 
+0

非常感谢! 一个家伙给了我一个小费,这个小费跟你的修改非常相似, ''[new addObject:[NSArray arrayWithArray:now]]; ' 这两者有什么区别? – S1U

+0

两者都做同样的事情,而不是添加对正在添加的数组的引用,它添加了不包含引用的数组副本。 我想我的答案会更好,因为它可以让你了解发生了什么。顺便说一句,如果你发现答案有帮助,答案的勾号将不胜感激。 – ajithmn89