2

私はこのように編成された辞書の配列を持っています:

[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}

手伝って頂けますか?

4

1 に答える 1

1

したがって、辞書の配列がある場合:

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);
于 2012-12-11T19:26:54.640 に答える