如何在NSArray上使用自定义排序

dub*_*eat 1 objective-c nsarray ios

如何在NSArray上执行自定义排序操作​​.我有一个字符串数组,这是我想要的订单.

NSArray A = {cat, dog, mouse, pig, donkey}
Run Code Online (Sandbox Code Playgroud)

我有一个字符串数组,没有按我想要的方式排序.

NSArray B = {dog,cat,mouse,donkey,pig}
Run Code Online (Sandbox Code Playgroud)

什么是最好的方式将阵列B放在与阵列A相同的顺序而不必使用密钥?

Jer*_*myP 7

这是一种方式

NSArray *sortedArray = [B sortedArrayUsingComparator: ^(id obj1, id obj2){
    NSUInteger index1 = [A indexOfObject: obj1];
    NSUInteger index2 = [A indexOfObject: obj2];
    NSComparisonResult ret = NSOrderedSame;
    if (index1 < index2)
    {
        ret = NSOrderedAscending;
    }
    else if (index1 > index2)
    {
        ret = NSOrderedDescending;
    }
    return ret;
}];
Run Code Online (Sandbox Code Playgroud)

上面将B的元素排序为与A相同的顺序,其中元素在B中但不在A中出现在末尾(因为它NSNotFound是一个非常大的数字).该算法的唯一问题是,它乘以排序的算法复杂度O(n),其中n是A.对象的数量因此对于大的A这将是相当缓慢.