我需要以下方面的帮助:
我有一个带有NSStrings的NSArray,我想通过这些字符串循环并找到匹配的字符串,当找到匹配时,匹配后的字符串将被提取到NSDictionary中,直到某个其他匹配被命中。
以下是一个例子:
NSArray *array = @[@"Fruit",@"Apple",@"Vegtable",@"Tomato",@"Fruit",@"Banana",@"Vegtable",@"Cucumber"];
所以我想循环通过这个数组并将它分成两个数组,一个用于水果,一个用于蔬菜。
任何人都可以提供逻辑帮助吗?
由于
答案 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]];
}
}