如何使用另一个NSMutableArray的值对一个NSMutableArray的值进行排序?

时间:2013-03-05 05:34:39

标签: ios sorting nsmutablearray

我有一个NSMutableArray *arr1值:

{(B,abc) (E,pqr) (C,xyz)}

和另一个NSMutableArray *arr2

{(B) (C) (E)}

现在我想使用arr1值对arr2进行排序,以便arr1变为{(B,abc) (C,xyz) (E,pqr)}。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

所以,似乎你有一个数组和一个数组数组:

NSArray *sorter = @[@"B", @"C", @"E"];
NSMutableArray *sortee = [@[
    @[@"B", @"abc"],
    @[@"E", @"pqr"],
    @[@"C", @"xyz"]
] mutableCopy];

[sortee sortUsingComparator:^(id o1, id o2) {
    NSString *s1 = [o1 objectAtIndex:0];
    NSString *s2 = [o2 objectAtIndex:0];
    NSInteger idx1 = [sorter indexOfObject:s1];
    NSInteger idx2 = [sorter indexOfObject:s2];
    return idx1 - idx2;
}];

答案 1 :(得分:0)

试试这个,

    NSMutableArray *unsortedArray = [NSMutableArray arrayWithObjects:[NSArray arrayWithObjects:@"B",@"abc", nil],[NSArray arrayWithObjects:@"E",@"pqr", nil],[NSArray arrayWithObjects:@"C",@"xyz", nil],nil];
    NSArray *guideArray = [NSArray arrayWithObjects:@"B",@"C",@"E", nil];

    for(int i=0; i< [guideArray count];i++)
    {
        for(int j=0; j< [unsortedArray count];j++)
        {
            if([[unsortedArray objectAtIndex:j] containsObject:[guideArray objectAtIndex:i]])
            {
                [unsortedArray exchangeObjectAtIndex:j withObjectAtIndex:i];
                break;                
            }
        }
    }

    NSLog(@"%@",unsortedArray);

我已经测试了这个并为我工作。希望这会对你有所帮助。