一个数组元素重新排序问题

问题##

最近在工作中遇到一个比较有意思的问题,根据相关业务逻辑抽象后可以转换为以下问题模型。

现有一个初始化数组为array,需要处理后的结果为result数组。
规则为:将值相同且个数大于1的元素(这些元素有一些相同的特征,如下例中的元素均以字母v开始,并且会连续出现)添加到一个新数组中以替换原来的元素并要求最终数组的元素相对顺序与原始数组一致。
array:{a,v1,v1,v4,v4,b,v2,v2,v5,v5,c,v3,v3}
result:{a,{v1,v1},{v4,v4},b,{v2,v2},{v5,v5},c,{v3,v3}}

思路##

需要解决该问题的关键是需要处理值相同的元素,并需要保证这些元素的结果数组中的相对顺序。要实现此目的需要将原始数组进行拆分处理,将符合条件的值相同的元素保存在一个临时数组中,创建一个空的结果数组,在每次循环处理原始数组时将值相同的元素添加到临时数组中,添加临时数组和不重复元素到结果数组中,具体实现可以参考下面的OC代码,其它语言实现方式类似。

代码##

    //初始化原始数组
    NSMutableArray *originArray = [NSMutableArray array];
    [originArray addObject:@"a"];
    [originArray addObject:@"v1"];
    [originArray addObject:@"v1"];
    
    [originArray addObject:@"v4"];
    [originArray addObject:@"v4"];
    
    [originArray addObject:@"b"];
    [originArray addObject:@"v2"];
    [originArray addObject:@"v2"];
    [originArray addObject:@"v5"];
    [originArray addObject:@"v5"];
    
    [originArray addObject:@"c"];
    [originArray addObject:@"v3"];
    [originArray addObject:@"v3"];
    
    //结果数组
    NSMutableArray *resultArray = [NSMutableArray array];
    
    //临时数组
    NSMutableArray *tempArray = [NSMutableArray array];
    
    for (NSString *item in originArray) {
        
        if ([item hasPrefix:@"v"]){//是否有重复值
            
            if (tempArray.count > 0) {
                NSString *key = tempArray.lastObject;
                
                if ([item isEqualToString:key]) {//值相同加入临时数组
                    [tempArray addObject:item];
                } else {//值不同加入结果数组并清空临时数组
                    NSMutableArray *array = [NSMutableArray arrayWithArray:tempArray];
                    [resultArray addObject:array];
                    [tempArray removeAllObjects];
                    
                    //将当前元素加入临时数组
                    [tempArray addObject:item];
                }
                
            } else {
                
                [tempArray addObject:item];
            }
            
        } else {//没有重复值的元素
            if (tempArray.count > 0) {
                NSMutableArray *array = [NSMutableArray arrayWithArray:tempArray];
                [resultArray addObject:array];
                [tempArray removeAllObjects];
            }
            
            [resultArray addObject:item];
        }
    }
    
    //将最后一组重复值加入结果数组
    if (tempArray.count > 0){
        [resultArray addObject:tempArray];
       }
    NSLog(@"result:%@",resultArray);

输出结果:

屏幕快照 2016-03-03 下午10.15.41.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容