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

标签 objective-c ios nsarray

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

NSArray A = {cat, dog, mouse, pig, donkey}

而且我有一个字符串数组,没有按照我想要的方式排序。
NSArray B = {dog,cat,mouse,donkey,pig}

将数组B与数组A置于相同顺序而不必使用键的最佳方法是什么?

最佳答案

这是一种方法

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;
}];

上面的代码将B的元素按与A相同的顺序排序,并且B中的元素出现在末尾,但A中的元素没有出现在最后(因为NSNotFound是一个很大的数字)。该算法的唯一问题是它将排序的算法复杂性乘以O(n),其中n是A中的对象数。因此,对于大A来说,它的运行速度将非常慢。

关于objective-c - 如何在NSArray上使用自定义排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11793578/

相关文章:

iphone - 转换后的 MP3 格式不支持 11025 和 22050 采样率

iphone - 如何在调用 objective-c 方法之前设置NSString

ios - 如何使“更多”按钮始终进入“更多 View ”?

ios - UIButton 超出 View Controller 而没有裁剪到其边界

ios - XML 到 NSDictionary 的 NSArray

iphone - 如何将十进制分隔符添加到 iOS 键盘数字键盘?

ios - 从警报启动设置

ios - 为什么 CFStringEncodings 在 Swift 中没有 UTF8?

iphone - 如何按字母顺序重新排列 NSArray 的元素(NSString)?

swift - 在名称数组中添加像字母一样的地址簿