2014-11-02 52 views
-1

我需要用以下幫助的NSArray:循環直通NSString的邏輯

我有NSString的一個NSArray,我要環通這些字符串,找到匹配的字符串,如果找到匹配的這場比賽之後的字符串會被提取到一個NSDictionary直到某個其他匹配被擊中。

下面是一個例子:

NSArray *array = @[@"Fruit",@"Apple",@"Vegtable",@"Tomato",@"Fruit",@"Banana",@"Vegtable",@"Cucumber"]; 

所以我想循環通過這個數組,並將其在2個陣列一個用於水果和一個用於蔬菜分裂。

任何人都可以幫助邏輯?

感謝

+1

你知道西紅柿是水果而不是蔬菜嗎? – Abizern 2014-11-02 11:26:14

回答

0

如果我完全理解你:

NSArray *array = @[@"Fruit",@"Apple",@"Vegtable",@"Tomato",@"Fruit",@"Banana",@"Vegtable",@"Cucumber"]; 

NSMutableArray *fruits = [NSMutableArray array]; 
NSMutableArray *vegtables = [NSMutableArray array]; 
for (NSInteger i = 0; i < array.count; ++i){ 
    if ([array[i] isEqualToString:@"Fruit"]){ 
     ++i; 
     [fruits addObject:array[i]]; 
    } 
    else if ([array[i] isEqualToString:@"Vegtable"]){ 
     ++i; 
     [vegtables addObject:array[i]]; 
    } 
} 
1

這可能是解決問題的最簡單的方法:

NSArray *array = @[@"Chair",@"Fruit",@"Apple",@"Orange",@"Vegetable",@"Tomato",@"Fruit",@"Banana",@"Vegetable",@"Cucumber"]; 

NSMutableArray *fruitArray = [NSMutableArray array]; 
NSMutableArray *vegetableArray = [NSMutableArray array]; 

NSMutableArray *currentTarget = nil; 

for (NSString *item in array) 
{ 
    if ([item isEqualToString: @"Fruit"]) 
    { 
     currentTarget = fruitArray; 
    } 
    else if ([item isEqualToString: @"Vegetable"]) 
    { 
     currentTarget = vegetableArray; 
    } 
    else 
    { 
     [currentTarget addObject: item]; 
    } 
} 

在一個迭代陣列上,只需保持根據最後一次出現的@"Fruit"@"Vegetable"字符串,使用指向兩個結果數組之一的指針將項添加到結果數組中。

該算法忽略@"Fruit"@"Vegetable"串的第一次出現之前的所有項目,因爲currentTarget被初始化爲nil,其忽略了addObject:消息。如果你想要不同的行爲,只需更改初始化。

你說你想在一個NSDictionary的結果,但沒有指定什麼應該是關鍵。如果你想要一個NSDictionary中有兩個按鍵,水果和蔬菜,以及含有項值NSArrays,只需使用以前創建的數組:

NSDictionary *dict = @{ @"Fruit": fruitArray, @"Vegetable": vegetableArray }; 

PS:你有一個錯字在你的榜樣,Vegtable代替蔬菜。我在我的代碼中更正了它,所以請記住它。