如何使用NSArray上的自定义sorting

我怎样才能在NSArray上执行一个自定义的sorting操作。 我有一个string数组,这是我要的命令。

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

而且我有一个不按照我想要的方式排列的string数组。

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

什么是最好的方式把数组B与arraysA相同的顺序,而不必使用密钥?

这是一个方法

 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是一个非常大的数字)。 algorithm的唯一问题是,它将algorithm的复杂度乘以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; }]; 

添加自定义sorting最好的方法是使用sotring和函数

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

NSInteger sortingFunction(id obj1,id obj2,void * context){
如果(/ /你的条件){
返回NSOrderedDescending;
}
如果(/ /你的条件){
返回NSOrderedAscending;
}
返回NSOrderedSame;
}

检查出sortedArrayUsingComparator ,总是为我工作!

例:

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