开发中的需求_数据拼接和分割笔记
2021-06-19 本文已影响0人
数字d
在开发中出现了这样一个场景
有7个按钮,分别是按钮的title分别是周一,周二,周三,周四,周五,周六,周日
要求:
1.点击其中的一个,那么就会进行选中,如果已经被选中,点击的时候就将状态取消选中
2:最终点完之后还有一个确认按钮,点击确认按钮的时候需要将原来选中的数据进行拼接处理;
3.拼接中有相邻的就用至表示,不相邻的用/表示
比如选中了 周一周二周三周五,那么应该展示为:周一至周三/周五
如果全选中应该展示为:周一至周日
如果选中了周一周二,周四周五,周日,那么应该展示为:周一至周二/周四至周五/周日
解决思路:
1.初始化一个数组arraySelect ,标记每个按钮的下标 1-7
2.当用户点击了某个按钮时候,先获取到这个按钮的下标,遍历数组中的值是否包含该下标,如果包含就从数组中移除,做反选显示,如果不包含就把添加到数组中,做选中的UI显示
- 对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 = @"";
}
效果:

