关于排序的问题

有这样的需求 我需要从数据库里取出的model两个为一组放到array里作为dataSource给tableView使用
现在的算法那是这样的

- (NSMutableArray *)getAllSelectedTopicModleFormRealm {

       RLMResults<DICDiscoverSelectedTopic *> *savedTopics = [DICDiscoverSelectedTopic allObjectsInRealm:_realm];
        
        NSMutableArray *array = [NSMutableArray array];
        
        NSMutableArray *arrayTemp = [NSMutableArray array];
    
        for (int i = 0; i < savedTopics.count; i++) {
            DICDiscoverSelectedTopic *Topic = [savedTopics objectAtIndex:i];
            
            if (i % 2 == 0 || i == 0) {
                [arrayTemp addObject:Topic];
            } else {
                [arrayTemp addObject:Topic];
                [array addObject:arrayTemp.copy];
                [arrayTemp removeAllObjects];
    
            }
        }
 
    return array;
    
}

但是现在有个新的需求要根据topic.order (int型)来进行排序
这个值大的放到最前面 小的放到后面 然后还要按照这个顺序来把model两个为一组放到arrayTemp里 并且最后要统一放到array里
求改进这个方法!

阅读 2.1k
1 个回答

最后用了个很笨很笨的方法 希望能得到优化

- (NSMutableArray *)getAllSelectedTopicModleFormRealm {
    
    RLMResults<DICDiscoverSelectedTopic *> *savedTopics = [DICDiscoverSelectedTopic allObjectsInRealm:_realm];

    NSMutableArray *arrayFinalWithOrderAndCode = [NSMutableArray array];
    NSMutableArray *arrayToSaveOrder = [NSMutableArray array];
    NSMutableDictionary *dicWithTopic = [NSMutableDictionary dictionary];
    NSMutableArray *arrayWithOrder = [NSMutableArray array];
    NSMutableArray *arrayTemp = [NSMutableArray array];
    
    for (int i = 0; i < savedTopics.count; i++) {
        DICDiscoverSelectedTopic *topic = [savedTopics objectAtIndex:i];
        [arrayToSaveOrder addObject:[NSString stringWithFormat:@"%d", topic.topOrder]];
        [dicWithTopic setValue:topic forKey:[NSString stringWithFormat:@"%d", topic.topOrder]];
    }
    
    /* 进行排序 */
    NSMutableArray *sortedArray = [arrayToSaveOrder sortedArrayUsingSelector:@selector(compare:)].mutableCopy;
    
    /* 因为是升序所以要改为降序或者逆转数组 */
    for (int i = 0; i< sortedArray.count/2.0; i++) {
        [sortedArray exchangeObjectAtIndex:i withObjectAtIndex:sortedArray.count - 1 - i];
    }
    
    
    
    /* 得到排序后的数组 */
    for (int i = 0 ; i < sortedArray.count; i++) {
        NSString *order = [sortedArray objectAtIndex:i];
        DICDiscoverSelectedTopic *orderModel = [dicWithTopic objectForKey:order];
        [arrayWithOrder addObject:orderModel];
    }
    
    /* 将数组两个一组进行处理 */
    for (int i = 0; i < savedTopics.count; i++) {
        DICDiscoverSelectedTopic *topic = [savedTopics objectAtIndex:i];
        if (i % 2 == 0 || i == 0) {
            [arrayTemp addObject:topic];
        } else {
            [arrayTemp addObject:topic];
            [arrayFinalWithOrderAndCode addObject:arrayTemp.copy];
            [arrayTemp removeAllObjects];
            
        }
    }

    return arrayFinalWithOrderAndCode;
    
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题