[英]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.