2014-10-09 69 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 
    ) 
)