通过NSArray逻辑的NSArray循环

时间:2014-11-02 11:00:16

标签: ios objective-c nsstring nsarray

我需要以下方面的帮助:

我有一个带有NSStrings的NSArray,我想通过这些字符串循环并找到匹配的字符串,当找到匹配时,匹配后的字符串将被提取到NSDictionary中,直到某个其他匹配被命中。

以下是一个例子:

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

所以我想循环通过这个数组并将它分成两个数组,一个用于水果,一个用于蔬菜。

任何人都可以提供逻辑帮助吗?

由于

2 个答案:

答案 0 :(得分:2)

这可能是解决问题的最简单方法:

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而不是蔬菜。我在我的代码中更正了它,所以请记住它。

答案 1 :(得分: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]];
    }
}