ios 數組中相同屬性值對象進行分組 。。。。。

說一下標題意思, 就是一個數組中很多對象,每個對象都有相同屬性,然後,屬性值也相等的 分別放到一個數組,怎麼實現呢

。。。。。

方式一

- (void)sameArrayGroup
{
    MOBLabel *lab1 = [[MOBLabel alloc] init];
    lab1.name = @"2";
    MOBLabel *lab2 = [[MOBLabel alloc] init];
    lab2.name = @"3";
    MOBLabel *lab3 = [[MOBLabel alloc] init];
    lab3.name = @"2";
    MOBLabel *lab4 = [[MOBLabel alloc] init];
    lab4.name = @"0";
    MOBLabel *lab5 = [[MOBLabel alloc] init];
    lab5.name = @"0";
    
    
    
    NSArray *array2 = @[lab1, lab2, lab3, lab4, lab5];
    
    
    NSMutableArray *array = [NSMutableArray arrayWithArray:array2];
    NSMutableArray *dateMutablearray = [@[] mutableCopy];
    for (int i = 0; i < array.count; i ++) {

        MOBLabel *lab = array[i];

        NSMutableArray *tempArray = [@[] mutableCopy];

        [tempArray addObject:lab];
        NSLog(@"====0000======");

        for (int j = i+1; j < array.count; j ++) {

            MOBLabel *jlab = array[j];

            if([lab.name isEqualToString:jlab.name]){

                [tempArray addObject:lab];
                NSLog(@"====11====");
                [array removeObjectAtIndex:j];
                j -= 1;
            }
        }
        [dateMutablearray addObject:tempArray];
    }
    NSLog(@"dateMutable:%@",dateMutablearray);
}

結果

dateMutable:(
        (
        "<MOBLabel: 0x7fc043802f30; baseClass = UILabel; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x60c0000913f0>>",
        "<MOBLabel: 0x7fc043802f30; baseClass = UILabel; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x60c0000913f0>>"
    ),
        (
        "<MOBLabel: 0x7fc040c09600; baseClass = UILabel; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x604000099230>>"
    ),
        (
        "<MOBLabel: 0x7fc040c0a000; baseClass = UILabel; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x604000099730>>",
        "<MOBLabel: 0x7fc040c0a000; baseClass = UILabel; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x604000099730>>"
    )
)

方式二

NSArray *array1 = @[@"2016-10-01",@"2016-10-02",@"2016-10-03",
                        
                        @"2016-10-01",@"2016-10-02",@"2016-10-03",
                        
                        @"2016-10-01",@"2016-10-02",@"2016-10-03",
                        
                        @"2016-10-01",@"2016-10-02",@"2016-10-03",
                        
                        @"2016-10-01",@"2016-10-02",@"2016-10-03",
                        
                        @"2016-10-01",@"2016-10-02",@"2016-10-03",
                        
                        @"2016-10-04",@"2016-10-06",@"2016-10-08",
                        
                        @"2016-10-05",@"2016-10-07",@"2016-10-09"];
    
    //NSArray *array2 = @[lab1, lab2, lab3, lab4, lab5];
    
    NSMutableArray *array = [NSMutableArray arrayWithArray:array1];
    
    NSMutableArray *dateMutablearray = [@[] mutableCopy];
    for (int i = 0; i < array.count; i ++) {
        
        NSString *string = array[i];
        
        NSMutableArray *tempArray = [@[] mutableCopy];
        
        [tempArray addObject:string];
        
        for (int j = i+1; j < array.count; j ++) {
            
            NSString *jstring = array[j];
            
            if([string isEqualToString:jstring]){
                
                [tempArray addObject:jstring];
                
                [array removeObjectAtIndex:j];
                j -= 1;
                
            }
            
        }
        
        [dateMutablearray addObject:tempArray];
        
    }
    
    NSLog(@"dateMutable:%@",dateMutablearray);
結果
2018-04-12 15:38:08.641319+0800 MOBTestVC[11909:323618] dateMutable:(
        (
        "2016-10-01",
        "2016-10-01",
        "2016-10-01",
        "2016-10-01",
        "2016-10-01",
        "2016-10-01"
    ),
        (
        "2016-10-02",
        "2016-10-02",
        "2016-10-02",
        "2016-10-02",
        "2016-10-02",
        "2016-10-02"
    ),
        (
        "2016-10-03",
        "2016-10-03",
        "2016-10-03",
        "2016-10-03",
        "2016-10-03",
        "2016-10-03"
    ),
        (
        "2016-10-04"
    ),
        (
        "2016-10-06"
    ),
        (
        "2016-10-08"
    ),
        (
        "2016-10-05"
    ),
        (
        "2016-10-07"
    ),
        (
        "2016-10-09"
    )
)

比較簡潔的方式======================

MOBLabel *lab1 = [[MOBLabel alloc] init];
    lab1.name = @"2";
    MOBLabel *lab2 = [[MOBLabel alloc] init];
    lab2.name = @"3";
    MOBLabel *lab3 = [[MOBLabel alloc] init];
    lab3.name = @"2";
    MOBLabel *lab4 = [[MOBLabel alloc] init];
    lab4.name = @"0";
    MOBLabel *lab5 = [[MOBLabel alloc] init];
    lab5.name = @"0";
    
    
    
    NSArray *array2 = @[lab1, lab2, lab3, lab4, lab5];
    
    NSMutableDictionary *res = @{}.mutableCopy;

    for (MOBLabel *obj in array2)
    {
        if (res[obj.name])
        {
            [res[obj.name] addObject:obj];
        }
        else
        {
            res[obj.name] = [NSMutableArray arrayWithObject:obj];
        }
    }

    NSLog(@"-----%@",res.allValues);

結果
 -----(
        (
        "<MOBLabel: 0x7fd020c02db0; baseClass = UILabel; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x6040002897e0>>",
        "<MOBLabel: 0x7fd02300baa0; baseClass = UILabel; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x600000286130>>"
    ),
        (
        "<MOBLabel: 0x7fd02300b390; baseClass = UILabel; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x600000285ff0>>"
    ),
        (
        "<MOBLabel: 0x7fd02300bd90; baseClass = UILabel; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x600000286270>>",
        "<MOBLabel: 0x7fd02300c080; baseClass = UILabel; frame = (0 0; 0 0); userInteractionEnabled = NO; layer = <_UILabelLayer: 0x6000002863b0>>"
    )
)

```
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章