ios - 关于排序的问题
天蓬老师
天蓬老师 2017-04-18 09:38:21
[iOS讨论组]

有这样的需求 我需要从数据库里取出的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里
求改进这个方法!

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(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;
    
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号