首先是對無序數(shù)組的排序?qū)崿F(xiàn)
假設(shè)數(shù)組oldArray中保存的是model冰寻,并且以model的number排序,利用系統(tǒng)的方法:
NSArray *orderArray = [oldArray sortedArrayUsingComparator:^NSComparisonResult(CustomModel * _Nonnull model1, CustomModel *_Nonnull model2) {
? ? ? ? NSInteger number1 = model1.number;
? ? ? ? NSInteger number2 = model2.number;
? ? ? ? return number1 > number2 ? NSOrderedDescending : NSOrderedAscending;
? ? }];
這樣我們得到了有序數(shù)組orderArray煤率,其中orderArray里元素是通過里邊model對象的number字段進(jìn)行升序的仰冠。
然后我們利用二分法將newModel插入到orderArray對應(yīng)位置
插入到對應(yīng)的位置,其實就是要找到當(dāng)前newModel的number對應(yīng)數(shù)組中元素的index蝶糯。
//二分法查找數(shù)據(jù)對應(yīng)插入的位置
- (NSInteger)indexOfModel:(CustomModel *)model inArray:(NSArray *)orderArray{
? ? ????NSInteger min = 0;
? ? ????NSInteger max = orderArray.count-1;
? ? ????while (min <= max) {
? ? ? ? ????NSInteger mid = (min+max)/2;
? ? ? ? ????CustomModel *modelInArray = orderArray[mid];
? ? ? ? ????if(model.number > modelInArray.number){
? ? ? ? ? ? ????min = mid+1;
? ? ? ? ????}else if(model.number<modelInArray.number){
? ? ? ? ? ? ????max = mid - 1;
? ? ? ? ????}else{
? ? ? ? ? ? ????return mid;
? ? ? ? ????}
? ? }
? ? return min;
}
將要插入到數(shù)組的newModel和orderArray傳遞到方法中洋只,返回的就是當(dāng)前newModel對應(yīng)有序數(shù)組對應(yīng)的位置。直接調(diào)用可變數(shù)組的insert方法即可昼捍。