0

私は以下のような辞書の配列を持っています。

NSMutableArray *newArray
({
    {
        A = John;
        B = THAILAND;
    },
    {
        A = Jack;
        B = US;
    }
    {
        A = Lee;
        B = BRAZIL;
    }
    {
        A = Brandon;
        B = UK;
    }
    {
        A = Jill;
        B = JAPAN;
    }
    {
        A = Johnny;
        B = UK;
    }
    {
        A = Amar;
        B = AUSTRALIA;
    }
})

上記の配列を、別の配列 (newArray のキー B) に基づいて並べ替えたいと考えています。

NSArray *sortArray = [[NSArray alloc] initWithObjects"US",@"UK",nil];

つまり、最終的な配列には、最初に US の値が含まれ、次に UK が続き、残りが含まれている必要があります。要するに、配列内の属性/キーに独自の順序を設定するにはどうすればよいですか。

どうやってやるの?

期待される結果 :

NSMutableArray *finalArray
({
    {
        A = Jack;
        B = US;
    },
    {
        A = Brandon;
        B = UK;
    }
    {
        A = Johnny;
        B = UK;
    }
    {
        A = John;
        B = THAILAND;
    }
    {
        A = Lee;
        B = BRAZIL;
    }
    {
        A = Jill;
        B = JAPAN;
    }
    {
        A = Amar;
        B = AUSTRALIA;
    }
})

キーBの昇順を与える以下のコードを試しました。

[newArray sortUsingDescriptors:[NSArray arrayWithObjects: [[NSSortDescriptor alloc] initWithKey:@"B" ascending:YES], nil]];
4

2 に答える 2

0

昇順でも降順でもない特定のキーに基づいて辞書の配列をソートするために、ランダムなユーザー定義の順序で、NSPredicate を使用して次のコードを記述し、期待される結果を得ました。

NSMutableArray *filterArray = [[NSMutableArray alloc] init];
        NSArray *sortArray = [[NSArray alloc] initWithObjects:@"US",@"UK",@"THAILAND",@"BRAZIL",@"JAPAN",@"AUSTRALIA",nil];  // Array containing all the distinct value for the key 'Currency' in self defined order (neither descending nor ascending order).
        NSPredicate *predCurrency = nil;
        // Creating the predicate for individual objects in the sortArray and appending it to the filterArray.
        for (int i = 0; i < [sortArray count]; i++) {
            predCurrency = [NSPredicate predicateWithFormat:@"(NEW_KEY_22 contains[cd] %@)",[sortArray objectAtIndex:i]];
            [filterArray addObjectsFromArray:[myNewArray filteredArrayUsingPredicate:predCurrency]];
        }
        NSLog(@"%@",filterArray);
        // Finally setting the filterArray to the array controller.
        [commercialArrayController  addObjects:filterArray];     // This gives the resultant array having the defined order in sortArray.
于 2013-07-05T12:50:33.550 に答える