iOS OC代碼--選擇一周內(nèi)幾天,判斷這幾天的連續(xù)性

一. 算法目的

項(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)待

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容