2014-10-09 58 views
0

我有一个.txt文件,里面有7个TAB分隔的字符串。我想一次一个取7个字符串,然后用制表符分隔符将每个字符串分隔成一个数组,然后将该数组放入一个Mutable数组中,从那里我可以处理7个处理过的字符串中的每一个。这里是我的代码:这段代码为什么不把NSArray对象放入NSMutableArray中?

NSMutableArray *arrayOfSplitStrings = [NSMutableArray arrayWithCapacity:0]; 

for(int i = 1; i <= inputStrings.count - 1; i++) {   
    NSArray *oneSplitString = [[NSArray alloc]init]; 
    arrayOfSplitStrings = [[NSMutableArray alloc]init]; 

    oneSplitString = [inputStrings[i] componentsSeparatedByString:@"\t"]; 
    [arrayOfSplitStrings addObjectsFromArray: oneSplitString]; 
} 

问题是,建成后,arrayOfSplitStrings只有一个(1)在其阵列,这是@“”!我已经看过,并尝试了所有我能想到的,但它仍然无法正常工作。我究竟做错了什么?

回答

3

这条线是造成重新创建的输出阵列,所述循环的每次迭代,因此它只是保留该文件的最后一行:

arrayOfSplitStrings = [[NSMutableArray alloc]init]; 

尝试:

NSMutableArray *arrayOfSplitStrings = [NSMutableArray new]; 
for (NSUInteger i = 1; i < [inputStrings count]; i++) { 
    NSArray *oneSplitString = [[inputStrings[i] componentsSeparatedByString:@"\t"] copy]; 
    [arrayOfSplitStrings addObject:oneSplitString]; 
} 

(注意for循环条件也改变)。

+0

这使一切(101名对象)到一(1)阵列(* arrayOfSplitStrings *);如果我有7 * inputStrings *,我应该在* arrayOfSplitStrings *中有7 * oneSplitStrings *数组。 (当然希望我没有把你弄糊涂)...并且循环必须跳过标签定义所在的第一行。 – SpokaneDude 2014-10-09 14:58:24

+0

@ spokane-dude确定,修正。 – Droppy 2014-10-09 15:01:26

+1

工作!我可以忍受第一个被分开的字符串;我只是略过它...再次感谢您的时间,我apppreciate它。 – SpokaneDude 2014-10-09 15:04:30

0

arrayOfSplitStrings外部的循环被隐藏在循环内创建的NSArray,将其删除。

没有必要创建NSArrayarrayOfSplitStrings,因为在下一行返回一个新数组,只需要一个声明。

for循环可以更改为for-in循环,从而消除索引变量i

还有一些其他优化可能。

NSArray *bodyStrings = [inputStrings subarrayWithRange:NSMakeRange(1, inputStrings.count-1)]; 
NSMutableArray *arrayOfSplitStrings = [NSMutableArray new]; 
for (NSString *aString in bodyStrings) { 
    NSArray *oneSplitString = [aString componentsSeparatedByString:@"\t"]; 
    [arrayOfSplitStrings addObject:oneSplitString]; 
} 

输入:

NSArray *inputStrings = @[@"qw\ter", @"as\tdf", @"zx\tcv"]; 

生产:

arrayOfSplitStrings: (
     (
     as, 
     df 
    ), 
     (
     zx, 
     cv 
    ) 
)