ios - 在一个array中有很多个model,现在需要将model.date日期是同一天的放入一个array?
巴扎黑
巴扎黑 2017-04-17 17:53:02
0
2
283

在一个array中有一个model,类似这样:
[

model1.date = 2016.4.12 8:25
model2.date = 2016.4.12 9:20
model3.date = 2016.3.13 8:30
model4.date = 2016.3.11 8:15
model5.date = 2015.2.12 1:20
model6.date = 2015.2.12 2:25

]

现在需要做的是将日期是同一天的放入一个数组中,没有日期相同的也放入一个数组中,最终要得到的数组应该是这样的:
[

[model1,model2],
[model3],
[model4],
[model5,model6],

]
请问,应该如何做?

巴扎黑
巴扎黑

全部回覆(2)
阿神

這是json?直接
var keymap={};
然後遍歷這個list
判斷keymap[item.date]是否為undefined
是則將它賦值為一個array
否就將item push進去
最後遍歷一個keymap,將所有的valuemapmap push進一個list

伊谢尔伦

首先,題主你的model.date是NSString類型,還是NSDate?日期格式不是「yyyy.MM.dd HH.mm」?
先拋開這些問題,針對題主給出的資料格式,提供一種思路,假設model.date是NSString類型(若是NSDate類型,則轉成NSString類型)。
1.遍歷這個數組,首先將model.date去除首尾空格

str = [model.date stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

2.再從str截取頭部到第一個空格間的子字串,例如:"2016.4.12 8:25"截取"2016.4.12",然後透過比較str就知道要把對應model放在哪個array

NSRange range = [str rangeOfString:@" "];
NSString *subStr = [str substringToIndex:range.location];

寫了個Demo驗證下,以下附上程式碼

//原始数组
    NSArray *array = @[[Model modeWithDate:@"2016.4.12 8:25"],
                       [Model modeWithDate:@"2016.4.12 9:20"],
                       [Model modeWithDate:@"2016.3.13 8:30"],
                       [Model modeWithDate:@"2016.3.11 8:15"],
                       [Model modeWithDate:@"2015.2.12 1:20"],
                       [Model modeWithDate:@"2015.2.12 2:25"]];
    NSLog(@"array:%@",array);
    
    NSMutableArray *dateArray = [NSMutableArray array];
    for (Model *item in array) {
        if (![item isKindOfClass:[Model class]]) {
            return;
        }
        //去除首尾空格
        NSString *dateStr = [item.date stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
        //截取从头部到空格之间的字符串
        NSRange range = [dateStr rangeOfString:@" "];
        NSString *str = [dateStr substringToIndex:range.location];
        BOOL isContain = NO;
        for (NSMutableArray *arrayItem in dateArray) {
            Model *firstModel = [arrayItem firstObject];
            NSString *firstDateStr = [firstModel.date stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
            NSRange spaceRange = [firstDateStr rangeOfString:@" "];
            NSString *firstStr = [firstDateStr substringToIndex:spaceRange.location];
            if ([firstStr isEqualToString:str]) {
                isContain = YES;
                [arrayItem addObject:item];
                break;
            }
        }
        if (!isContain) {
            [dateArray addObject:[NSMutableArray arrayWithObject:item]];
        }
    }
    
    NSLog(@"dateArray:%@",dateArray);

對應的控制台輸出:

觀察model的記憶體位址,驗證是沒問題的。
假如,model.date是NSDate類型,也可以將model.date轉成"yyyy-MM-dd"的字串,再去對比這串字串也是可以的,希望我的回答對你有幫助。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板