簡體   English   中英

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

[英]How to use Custom ordering on 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來說,它的速度將非常慢。

如果你有:-

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

NSMutableArray B = {dog,cat,mouse,donkey,pig}

您可以使用:-

[B sortArrayUsingComparator:^NSComparisonResult(NSString *obj1,   NSString *obj2) {
    NSUInteger indexOfObj1 = [A indexOfObject: obj1];
    NSUInteger indexOfObj2 = [A indexOfObject: obj2];
    if(indexOfObj1 == NSNotFound || indexOfObj2 == NSNotFound){
        return NSOrderedSame;
    }
    else if(indexOfObj1 > indexOfObj2){
        return NSOrderedDescending;
    }

    return NSOrderedAscending;
}];

sortedArrayUsingComparator ,對我一直有效!

例:

NSArray *sortedArray = [B sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1,   NSString *obj2) {
    //Insert custom ordering code here, this will just sort alphabetically.
    return [obj1 compare:obj2];
}];

添加自定義排序的最佳方法是對函數進行排序


NSArray *B=[A sortedArrayUsingFunction:sortingFunction context:nil];
//  sortingFunction

NSInteger sortingFunction( id obj1, id obj2, void *context){ if ( //your condition ){ return NSOrderedDescending; } if ( //your condition){ return NSOrderedAscending; } return NSOrderedSame; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM