iOS使两个数组元素的排序一致

伪代码原理

//使array2 的元素按照name的排序 和 array1 一致

    NSArray *array1 = xxx1;
    NSArray *array2 = xxx2;
    
    NSMutableArray *tempArray = [NSMutableArray array];
    [array1 enumerateObjectsUsingBlock:^(NSObject *obj, NSUInteger idx, BOOL * _Nonnull stop) {
        [array2 enumerateObjectsUsingBlock:^(id *obj2, NSUInteger idx, BOOL * _Nonnull stop) {
            if ([obj.name isEqual:obj2]) {
                [tempArray addObject:obj2];
            }
        }];
    }];
    array2 = tempArray.copy

实际应用

如下图,拖拽栏目之后,各个控制器的顺序和栏目的顺序要一致

请添加图片描述

请添加图片描述

实际代码

    NSMutableArray * newChannldataList = [TPUserDefault instance].defaultNodeList;
    //更换已经加载过的vc数据源顺序
    __weak typeof(self)weakSelf = self;
    NSMutableArray *nodeIdArray = [NSMutableArray array];
    if (newChannldataList.count > 0) {
        [newChannldataList enumerateObjectsUsingBlock:^(NSDictionary *dic, NSUInteger idx, BOOL *stop) {
            [nodeIdArray addObject:dic[@"nodeId"]];
        }];
    }
    
    if (self.pageViewControllers) {
        NSMutableArray *tempArr = [NSMutableArray array];
        [nodeIdArray enumerateObjectsUsingBlock:^(NSString *nodeId, NSUInteger i, BOOL * _Nonnull stop) {
            
            [pageViewControllers enumerateObjectsUsingBlock:^(id vcObj, NSUInteger j, BOOL * _Nonnull stop) {
                if ([vcObj isKindOfClass:[ChannelContentListController class]]) {
                    ChannelContentListController *contentListVC = (ChannelContentListController *)vcObj;
                    if (nodeId.integerValue == contentListVC.nodeId.integerValue) {
                        tempArr[i] = vcObj;
                        *stop = YES;
                    }
                }
            }];
        }];
        [pageViewControllers removeAllObjects];
        pageViewControllers = tempArr;
 

Guess you like

Origin blog.csdn.net/LIUXIAOXIAOBO/article/details/121389736