范围在多级数组中扩展

时间:2013-02-08 13:38:14

标签: objective-c arrays

这是我的代码。

NSString* seats = @"NEWS";
NSMutableString *sp = [[NSMutableString alloc] initWithString:@"             "];
NSArray *dials=@[@[sp, sp, sp, sp], @[sp, sp, sp, sp]];
[dials[0][2] replaceCharactersInRange:NSMakeRange(5, 1) withString:[seats substringWithRange:NSMakeRange(3,1)]];
NSLog(@"dial 0 0 : %@",dials[0][0]);
NSLog(@"dial 0 1 : %@",dials[0][1]);
NSLog(@"dial 0 2 : %@",dials[0][2]);
NSLog(@"dial 0 3 : %@",dials[0][3]);

这是我的控制台读数。

2013-02-08 08:23:26.114 [29075:11303] dial 0 0 :      S       
2013-02-08 08:23:26.115 [29075:11303] dial 0 1 :      S       
2013-02-08 08:23:26.115 [29075:11303] dial 0 2 :      S       
2013-02-08 08:23:26.115 [29075:11303] dial 0 3 :      S       

我怎样才能获得以下读数,这就是我想要的?

2013-02-08 08:23:26.114 [29075:11303] dial 0 0 :              
2013-02-08 08:23:26.115 [29075:11303] dial 0 1 :              
2013-02-08 08:23:26.115 [29075:11303] dial 0 2 :      S       
2013-02-08 08:23:26.115 [29075:11303] dial 0 3 :              

1 个答案:

答案 0 :(得分:3)

通过这样做:

NSArray *dials=@[@[sp, sp, [sp mutableCopy], sp], @[sp, sp, sp, sp]];

为什么?如果你认为该数组只包含重复的对象。每个指针都指向同一个对象,除了拨号[0] [2],它指向一个复制的对象。

允许在同一个数组中放置重复的对象,但它可能在概念上是错误的。所以也要考虑复制所有对象。

另一个解决方案是使用带有不可变字符串的可变数组替换不可变数组和可变字符串,在这种情况下,您还可以放置重复对象,并更改应替换它的对象:

NSString *sp = @"             ";
NSArray*dials=@[[@[sp, sp, sp, sp]mutableCopy], [@[sp, sp, sp, sp]mutableCopy]];
NSString* replace= [dials[0][2] stringByReplacingCharactersInRange:NSMakeRange(5, 1) withString:[seats substringWithRange:NSMakeRange(3,1)]];
[dials[0] replaceObjectAtIndex: 2 withObject: replace];