美文网首页
开发中的需求_数据拼接和分割笔记

开发中的需求_数据拼接和分割笔记

作者: 数字d | 来源:发表于2021-06-19 18:35 被阅读0次

在开发中出现了这样一个场景

有7个按钮,分别是按钮的title分别是周一,周二,周三,周四,周五,周六,周日

要求:

1.点击其中的一个,那么就会进行选中,如果已经被选中,点击的时候就将状态取消选中

2:最终点完之后还有一个确认按钮,点击确认按钮的时候需要将原来选中的数据进行拼接处理;

3.拼接中有相邻的就用至表示,不相邻的用/表示
比如选中了 周一周二周三周五,那么应该展示为:周一至周三/周五

如果全选中应该展示为:周一至周日

如果选中了周一周二,周四周五,周日,那么应该展示为:周一至周二/周四至周五/周日

解决思路:

1.初始化一个数组arraySelect ,标记每个按钮的下标 1-7

2.当用户点击了某个按钮时候,先获取到这个按钮的下标,遍历数组中的值是否包含该下标,如果包含就从数组中移除,做反选显示,如果不包含就把添加到数组中,做选中的UI显示

  1. 对arraySelect数组进行排序,升序

4.对arraySelect进行分组
分组原则:
1,2,3,4,5,6,7所对应的数据分组最多能分成四组,而且情况是1, 3 , 5 ,7的情况,并显示为周一/周三/周五/周日
其余情况豆小于4

于是创建四个存储数组arr0,arr1,arr2,arr3

直接上代码

NSArray * array = [NSArray arrayWithArray:self.selectArr];
    NSString * num = [NSString stringWithFormat:@"%ld",(long)index];
    if ([array containsObject:num]) {
        [self.selectArr removeObject:num];
        [self grayBtnWithTag:tag];
    }else {
        [self.selectArr addObject:num];
        [self colorBtnWithTag:tag];
    }
    NSLog(@"%@",self.selectArr);

    for (int i = 0; i < [self.selectArr count] ; i++) {
            for (int j = 0; j < [self.selectArr count] - i - 1; j++) {
                NSString * nj = self.selectArr[j];
                NSString * njpp = self.selectArr[j + 1];
                if ([nj integerValue] > [njpp integerValue]) {
                    self.selectArr[j] = njpp;
                    self.selectArr[j+1] = nj;
                }
            }
        }

    NSLog(@"%@",self.selectArr);
    self.arr0 = [NSMutableArray arrayWithCapacity:0];
    self.arr1 = [NSMutableArray arrayWithCapacity:0];
    self.arr2 = [NSMutableArray arrayWithCapacity:0];
    self.arr3 = [NSMutableArray arrayWithCapacity:0];
    int recoderArrIndex = 0;
    int lastValue = 0;
    for (int i = 0; i < self.selectArr.count; i ++) {
        NSNumber * selValueN = self.selectArr[I];
        int selValue = [selValueN intValue];
        if (lastValue == 0) {
            [self.arr0 addObject:selValueN];
            lastValue = selValue;
        }else {
            if ((lastValue + 1) != selValue) {
                recoderArrIndex ++;
            }
            switch (recoderArrIndex) {
                case 0:{
                    [self.arr0 addObject:selValueN];
                }
                    break;
                case 1:{
                    [self.arr1 addObject:selValueN];
                }
                    break;
                case 2:{
                    [self.arr2 addObject:selValueN];
                }
                    break;
                case 3:{
                    [self.arr3 addObject:selValueN];
                }
                    break;
                    
                default:
                    break;
            }
            lastValue = selValue;
        }
    }
    NSString * total = @"";
    if (_arr3.count > 0) {
        if (_arr3.count == 1) {
            NSNumber * number = _arr3[0];
            total = [NSString stringWithFormat:@"%@",[self changeNumberToDay:[number integerValue]]];
        }
    }
    if (_arr2.count > 0) {
        if (_arr2.count == 1) {
            NSNumber * number = _arr2[0];
            if (total.isNotBlank) {
                total = [NSString stringWithFormat:@"%@/%@",[self changeNumberToDay:[number integerValue]],total];
            }else {
                total = [NSString stringWithFormat:@"%@",[self changeNumberToDay:[number integerValue]]];
            }
        }else {
            NSNumber * firstValue = _arr2.firstObject;
            NSNumber * lastValue = _arr2.lastObject;
            if (total.isNotBlank) {
                total = [NSString stringWithFormat:@"%@至%@/%@",[self changeNumberToDay:[firstValue integerValue]],[self changeNumberToDay:[lastValue integerValue]],total];

            }else {
                total = [NSString stringWithFormat:@"%@至%@",[self changeNumberToDay:[firstValue integerValue]],[self changeNumberToDay:[lastValue integerValue]]];
            }
        }
    }
    
    if (_arr1.count > 0) {
        if (_arr1.count == 1) {
            NSNumber * number = _arr1[0];
            if (total.isNotBlank) {
                total = [NSString stringWithFormat:@"%@/%@",[self changeNumberToDay:[number integerValue]],total];
            }else {
                total = [NSString stringWithFormat:@"%@",[self changeNumberToDay:[number integerValue]]];
            }
        }else {
            NSNumber * firstValue = _arr1.firstObject;
            NSNumber * lastValue = _arr1.lastObject;
            if (total.isNotBlank) {
                total = [NSString stringWithFormat:@"%@至%@/%@",[self changeNumberToDay:[firstValue integerValue]],[self changeNumberToDay:[lastValue integerValue]],total];
            }else {
                total = [NSString stringWithFormat:@"%@至%@",[self changeNumberToDay:[firstValue integerValue]],[self changeNumberToDay:[lastValue integerValue]]];
            }
        }
    }
    
    if (_arr0.count > 0) {
        if (_arr0.count == 1) {
            NSNumber * number = _arr0[0];
            if (total.isNotBlank) {
                total = [NSString stringWithFormat:@"%@/%@",[self changeNumberToDay:[number integerValue]],total];
            }else {
                total =  [NSString stringWithFormat:@"%@",[self changeNumberToDay:[number integerValue]]];
            }
        }else {
            NSNumber * firstValue = _arr0.firstObject;
            NSNumber * lastValue = _arr0.lastObject;
            if (total.isNotBlank) {
                total = [NSString stringWithFormat:@"%@至%@/%@",[self changeNumberToDay:[firstValue integerValue]],[self changeNumberToDay:[lastValue integerValue]],total];
            }else {
                total = [NSString stringWithFormat:@"%@至%@",[self changeNumberToDay:[firstValue integerValue]],[self changeNumberToDay:[lastValue integerValue]]];
            }
        }
    }
    if (total.isNotBlank) {
        self.headStr = total;
    }else {
        self.headStr = @"";
    }

效果:


I1 I2

相关文章

网友评论

      本文标题:开发中的需求_数据拼接和分割笔记

      本文链接:https://www.haomeiwen.com/subject/etddyltx.html