一. 算法目的
項(xiàng)目需求:用戶可以在選擇時(shí)間的模塊中,選擇星期一~星期天的任意幾天,選擇確認(rèn)后,要重新組織語言來描述所選的日期。例如:選擇星期一,二,三,四,描述成“周一~周四”;選擇周一,三,四,五,描述成“周一、周三~周五”,依此類推,只要中間有超過三個(gè)連續(xù)的要格式化成“周幾~周幾”,不連續(xù)的用頓號隔開。
二. 算法實(shí)現(xiàn)邏輯
1. 選擇確認(rèn)后把獲取到的所有星期數(shù)存進(jìn)一個(gè)數(shù)組; ? ? ? ? ? ? ? ? ? ?_____數(shù)組1
2. 創(chuàng)建另外的一個(gè)包涵所有星期數(shù)的數(shù)組; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? _____數(shù)組2?
3. 兩個(gè)數(shù)組進(jìn)行比較,得到 1 數(shù)組中沒有被選擇的所有星期數(shù); _____數(shù)組3
4. 把數(shù)組3拼接成一個(gè)字符串,用這個(gè)字符串去切割數(shù)組2,得到新的數(shù)組,這個(gè)數(shù)組中包涵了分割好的星期數(shù)(連續(xù)的在一個(gè)數(shù)組,不連續(xù)的在另一個(gè)數(shù)組,其中切割的時(shí)候會(huì)產(chǎn)生空數(shù)組); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? _____數(shù)組4
5. 移除4數(shù)組中的空數(shù)組,對每個(gè)數(shù)組進(jìn)行格式化:大于等于三個(gè)的,取第一個(gè)和最后一個(gè)格式化成“周幾~周幾”;小于三個(gè)的格式化成“周幾”,把所有格式化后的字符串用“、”拼接起來,得到的字符串就是目標(biāo)字符串。
三. 代碼
代碼很簡單:
+ (NSString *)Z_weekdaySortWithDayArray:(NSArray *)array {
NSArray *titleArr = @[@"周一",@"周二",@"周三",@"周四",@"周五",@"周六",@"周日"];
NSArray *wholeArr = @[@"1",@"2",@"3",@"4",@"5",@"6",@"7"];
NSString *wholeStr = [wholeArr componentsJoinedByString:@""];
NSArray *unSeleccArr = [wholeArr filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"NOT (SELF in %@)", array]];
NSString *unSelectStr = [unSeleccArr componentsJoinedByString:@""];
NSArray *sortArr = [wholeStr componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:unSelectStr]];
NSMutableArray *array1 = [NSMutableArray arrayWithArray:sortArr];
[array1 removeObject:@""];
NSMutableArray *goalArr;
for (NSString *subStr in array1) {
NSString *str1;
if (subStr.length > 1) {
str1 = [self reGetArrayWithString:subStr];
} else {
str1 = titleArr[[subStr integerValue]-1];
}
if (!goalArr) {
goalArr = [NSMutableArray array];
}
[goalArr addObject:str1];
}
NSString *finalStr = [goalArr componentsJoinedByString:@"、"];
return finalStr;
}
array表示輸入的選定的日期
+ (NSString *)reGetArrayWithString:(NSString *)string {
NSArray *titleArr = @[@"周一",@"周二",@"周三",@"周四",@"周五",@"周六",@"周日"];
NSString *topStr = [string substringToIndex:1];
NSString *bottomStr = [string substringFromIndex:string.length-1];
NSString *goalStr;
if (string.length >= 3) {
goalStr = [NSString stringWithFormat:@"%@至%@",titleArr[[topStr integerValue]-1],titleArr[[bottomStr integerValue]-1]];
} else {
goalStr = [NSString stringWithFormat:@"%@、%@",titleArr[[topStr integerValue]-1],titleArr[[bottomStr integerValue]-1]];
}
return goalStr;
}
這個(gè)方法表示的是:格式化分割后的字符串(“星期幾~星期幾”或者“星期幾、星期幾”);
四. over
over
代碼很少,實(shí)現(xiàn)也很簡單,難的是想到這個(gè)思路。
邏輯寫的不清楚請多多擔(dān)待