2010-01-12 138 views
0

當然,有一個更簡單的方法來做到這一點?有沒有更簡單的方法來做到這一點?

NSString *filePathA = [[NSBundle mainBundle] pathForResource:@"A" ofType:@"txt"]; 
NSString *myTextA= [NSString stringWithContentsOfFile:filePathA encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresA = [myTextA componentsSeparatedByString:@"-"]; 




NSString *filePathB = [[NSBundle mainBundle] pathForResource:@"B" ofType:@"txt"]; 
NSString *myTextB= [NSString stringWithContentsOfFile:filePathB encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresB = [myTextB componentsSeparatedByString:@"-"]; 

NSString *filePathC = [[NSBundle mainBundle] pathForResource:@"C" ofType:@"txt"]; 
NSString *myTextC= [NSString stringWithContentsOfFile:filePathC encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresC = [myTextC componentsSeparatedByString:@"-"]; 

NSString *filePathD = [[NSBundle mainBundle] pathForResource:@"D" ofType:@"txt"]; 
NSString *myTextD= [NSString stringWithContentsOfFile:filePathD encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresD = [myTextD componentsSeparatedByString:@"-"]; 

NSString *filePathE = [[NSBundle mainBundle] pathForResource:@"E" ofType:@"txt"]; 
NSString *myTextE= [NSString stringWithContentsOfFile:filePathE encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresE = [myTextE componentsSeparatedByString:@"-"]; 

NSString *filePathF = [[NSBundle mainBundle] pathForResource:@"F" ofType:@"txt"]; 
NSString *myTextF= [NSString stringWithContentsOfFile:filePathF encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresF = [myTextF componentsSeparatedByString:@"-"]; 

NSString *filePathG = [[NSBundle mainBundle] pathForResource:@"G" ofType:@"txt"]; 
NSString *myTextG= [NSString stringWithContentsOfFile:filePathG encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresG = [myTextG componentsSeparatedByString:@"-"]; 

NSString *filePathH = [[NSBundle mainBundle] pathForResource:@"H" ofType:@"txt"]; 
NSString *myTextH= [NSString stringWithContentsOfFile:filePathH encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresH = [myTextH componentsSeparatedByString:@"-"]; 

NSString *filePathI = [[NSBundle mainBundle] pathForResource:@"I" ofType:@"txt"]; 
NSString *myTextI= [NSString stringWithContentsOfFile:filePathI encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresI = [myTextI componentsSeparatedByString:@"-"]; 

NSString *filePathJ = [[NSBundle mainBundle] pathForResource:@"J" ofType:@"txt"]; 
NSString *myTextJ= [NSString stringWithContentsOfFile:filePathJ encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresJ = [myTextJ componentsSeparatedByString:@"-"]; 

NSString *filePathK = [[NSBundle mainBundle] pathForResource:@"K" ofType:@"txt"]; 
NSString *myTextK= [NSString stringWithContentsOfFile:filePathK encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresK = [myTextK componentsSeparatedByString:@"-"]; 

NSString *filePathL = [[NSBundle mainBundle] pathForResource:@"L" ofType:@"txt"]; 
NSString *myTextL= [NSString stringWithContentsOfFile:filePathL encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresL = [myTextL componentsSeparatedByString:@"-"]; 

NSString *filePathM = [[NSBundle mainBundle] pathForResource:@"M" ofType:@"txt"]; 
NSString *myTextM= [NSString stringWithContentsOfFile:filePathM encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresM = [myTextM componentsSeparatedByString:@"-"]; 

NSString *filePathN = [[NSBundle mainBundle] pathForResource:@"N" ofType:@"txt"]; 
NSString *myTextN = [NSString stringWithContentsOfFile:filePathN encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresN = [myTextN componentsSeparatedByString:@"-"]; 

NSString *filePathO = [[NSBundle mainBundle] pathForResource:@"O" ofType:@"txt"]; 
NSString *myTextO= [NSString stringWithContentsOfFile:filePathO encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresO = [myTextO componentsSeparatedByString:@"-"]; 

NSString *filePathP = [[NSBundle mainBundle] pathForResource:@"P" ofType:@"txt"]; 
NSString *myTextP= [NSString stringWithContentsOfFile:filePathP encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresP = [myTextP componentsSeparatedByString:@"-"]; 

NSString *filePathQ = [[NSBundle mainBundle] pathForResource:@"Q" ofType:@"txt"]; 
NSString *myTextQ= [NSString stringWithContentsOfFile:filePathQ encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresQ = [myTextQ componentsSeparatedByString:@"-"]; 

NSString *filePathR = [[NSBundle mainBundle] pathForResource:@"R" ofType:@"txt"]; 
NSString *myTextR= [NSString stringWithContentsOfFile:filePathR encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresR = [myTextR componentsSeparatedByString:@"-"]; 

NSString *filePathS = [[NSBundle mainBundle] pathForResource:@"S" ofType:@"txt"]; 
NSString *myTextS= [NSString stringWithContentsOfFile:filePathS encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresS = [myTextS componentsSeparatedByString:@"-"]; 

NSString *filePathT = [[NSBundle mainBundle] pathForResource:@"T" ofType:@"txt"]; 
NSString *myTextT= [NSString stringWithContentsOfFile:filePathT encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresT = [myTextT componentsSeparatedByString:@"-"]; 

NSString *filePathU = [[NSBundle mainBundle] pathForResource:@"U" ofType:@"txt"]; 
NSString *myTextU= [NSString stringWithContentsOfFile:filePathU encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresU = [myTextU componentsSeparatedByString:@"-"]; 

NSString *filePathV = [[NSBundle mainBundle] pathForResource:@"V" ofType:@"txt"]; 
NSString *myTextV= [NSString stringWithContentsOfFile:filePathV encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresV = [myTextV componentsSeparatedByString:@"-"]; 

NSString *filePathW = [[NSBundle mainBundle] pathForResource:@"W" ofType:@"txt"]; 
NSString *myTextW= [NSString stringWithContentsOfFile:filePathW encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresW = [myTextW componentsSeparatedByString:@"-"]; 
//none with "X" 
//NSString *filePathX = [[NSBundle mainBundle] pathForResource:@"X" ofType:@"txt"]; 
//NSString *myTextX= [NSString stringWithContentsOfFile:filePathX encoding:NSUTF8StringEncoding error:nil]; 
//NSArray *arrayStructuresX = [myTextX componentsSeparatedByString:@"-"]; 

NSString *filePathY = [[NSBundle mainBundle] pathForResource:@"Y" ofType:@"txt"]; 
NSString *myTextY= [NSString stringWithContentsOfFile:filePathY encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresY = [myTextY componentsSeparatedByString:@"-"]; 

NSString *filePathZ = [[NSBundle mainBundle] pathForResource:@"Z" ofType:@"txt"]; 
NSString *myTextZ= [NSString stringWithContentsOfFile:filePathZ encoding:NSUTF8StringEncoding error:nil]; 
NSArray *arrayStructuresZ = [myTextZ componentsSeparatedByString:@"-"]; 

有什麼想法?我被建議折射它,但我不知道如何做到這一點!

感謝

山姆

UPDATE:

[類似這其實糟糕的重複代碼?即時開始?這會被認爲是不好的做法?或編程世界中的「不」? ]

+1

也許使用循環和數組? – 2010-01-12 23:55:58

+1

你能否縮短你的例子? ;-) – 2010-01-13 00:06:47

+0

這個例子給你點我想要做的25/26次 – 2010-01-13 00:27:17

回答

2

我會建議創建一個數組和一個字典:一個存放所有的文件路徑,一個存放你的arrayStructures。

使用所有要從中加載數據的文件名創建filepaths數組。

arrayStructures字典最初應該是一個容量爲25的空NSMutableDictionary(字母表中的字母-1(不使用x))。

循環遍歷filepaths數組,並執行每次迭代的確切操作,除了每次迭代結束時,應該調用addObject: forKey: arrayStructures字典。

NSMutableDictionary *structures = [ [ NSMutableDictionary alloc ] initWithCapacity:25 ]; 
NSArray *filePaths = [ [NSArray alloc] initWithObjects: @"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", /* no X */@"Y", @"Z" ]; // you could also just create a standalone text file and load it from there, i know this is ridiculous! 

for(NSString *path in filePaths) { 
    NSString *filePath = [[NSBundle mainBundle] pathForResource:path ofType:@"txt"]; 
    NSString *myText = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; 
    [ structures addObject: [myText componentsSeparatedByString:@"-"] forKey: path ]; 
} 

現在遍歷字典....

for(NSString *filePath in structures) { 
    NSArray *structure = [ structure objectForKey: filePath ]; 
    //... 
} 
+0

你可以編輯這個到底是什麼工作?謝謝! – 2010-01-13 00:21:42

+0

這是什麼工作。 – 2010-01-13 00:44:36

-1

如果你真的想所有這些局部變量,我認爲這看起來像使用宏一個絕好的機會(如果我敢說)

#define MAKEARRAY(_letter) \ 
    NSString *filePath ## _letter = [[NSBundle mainBundle] pathForResource:@ #_letter ofType:@"txt"]; \ 
    NSString *myText ## _letter = [NSString stringWithContentsOfFile:filePath ## _letter encoding:NSUTF8StringEncoding error:nil]; \ 
    NSArray *arrayStructures ## _letter = [myText ## _letter componentsSeparatedByString:@"-"] 

MAKEARRAY(A); 
MAKEARRAY(B); 
MAKEARRAY(C); 
: 
: 
MAKEARRAY(W); 
//MAKEARRAY(X); none with X 
MAKEARRAY(Y); 
MAKEARRAY(Z); 
+0

你爲什麼說「我敢說?」宏是壞的還是什麼? – 2010-01-13 03:53:25

+0

我不認爲他們明智地使用不好。但你可以看到,有些人認爲是這樣。 (儘管我試圖對這個用法提出一些要求 - 「真的需要所有這些局部變量」)。我將在這裏留下答案(不是刪除),而只是作爲「其他選項」。 – epatel 2010-01-13 06:29:20

0

聞起來就像寫了一個循環的絕佳機會。

你可以看到你的代碼是重複的,所以你需要做的是提取每個元素的類似部件作爲循環,提取不同compoenent作爲輸入輸出陣列,和你完成。

相關問題