したがって、辞書の配列がある場合:
NSArray *originalArray = @[
@{@"code": @1, @"category":@"drink"},
@{@"code": @2, @"category":@"drink"},
@{@"code": @3, @"category":@"drink"},
@{@"code": @4, @"category":@"food"},
@{@"code": @5, @"category":@"food"},
@{@"code": @6, @"category":@"drink"}
];
次のような方法で、必要なものを入手できます。
NSMutableArray *arrayOfCategories = [NSMutableArray array];
NSMutableArray *arrayOfArrayOfCodes = [NSMutableArray array];
for (NSDictionary *originalArrayEntry in originalArray)
{
NSString *category = originalArrayEntry[@"category"];
NSString *code = originalArrayEntry[@"code"];
NSInteger indexInArrayOfCategories = [arrayOfCategories indexOfObject:category];
NSMutableArray *arrayOfCodes;
if (indexInArrayOfCategories == NSNotFound)
{
indexInArrayOfCategories = [arrayOfCategories count];
arrayOfCodes = [NSMutableArray array];
[arrayOfArrayOfCodes addObject:arrayOfCodes];
[arrayOfCategories addObject:category];
}
else
{
arrayOfCodes = arrayOfArrayOfCodes[indexInArrayOfCategories];
}
[arrayOfCodes addObject:code];
}
NSLog(@"arrayOfArrayOfCodes = %@", arrayOfArrayOfCodes);
NSLog(@"arrayOfCategories = %@", arrayOfCategories);
カテゴリ値の配列を要求しなかったことに注意してください。ただし、要求した結果セットは、それがないと意味がないと思います。
個人的に、私があなたが求めたことを達成したい(そしてその個別の配列の必要性を排除したい)そして順序が重要ではなかった場合、私はコードの配列の値を持つ辞書(カテゴリ値によってキー設定された)に傾くかもしれません、たとえば、次の結果から生じるもの:
NSMutableDictionary *resultDictionary = [NSMutableDictionary dictionary];
for (NSDictionary *originalArrayEntry in originalArray)
{
NSString *category = originalArrayEntry[@"category"];
NSString *code = originalArrayEntry[@"code"];
NSMutableArray *arrayForCategory = resultDictionary[category];
if (!arrayForCategory)
{
arrayForCategory = [NSMutableArray array];
resultDictionary[category] = arrayForCategory;
}
[arrayForCategory addObject:code];
}
NSLog(@"resultDictionary = %@", resultDictionary);