繁体   English   中英

iOS:从字典中获取矩阵

[英]iOS: obtain a matrix from dictionary

我有一个这样组织的字典数组:

[0] {@"code", 1} {@"category","drink"} ...and other value that aren't important
[1] {@"code", 2} {@"category","drink"}
[2] {@"code", 3} {@"category","drink"}
[3] {@"code", 4} {@"category","food"}
[4] {@"code", 5} {@"category","food"}
[5] {@"code", 6} {@"category","drink"}

以这种方式获得矩阵(数组数组)的最佳方法是什么?

[0] {1,2,3,6}
[1] {4,5}

你能帮助我吗?

因此,如果您有一系列字典:

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM