2016-08-22 27 views
0

如這裏提到的能夠以迅速對如何組由一個數組元素:使用此擴展How to group by the elements of an array in Swift如何由陣列的在目標C的元素組

public extension SequenceType { 

    /// Categorises elements of self into a dictionary, with the keys given by keyFunc 

    func categorise<U : Hashable>(@noescape keyFunc: Generator.Element -> U) -> [U:[Generator.Element]] { 
    var dict: [U:[Generator.Element]] = [:] 
    for el in self { 
     let key = keyFunc(el) 
     if case nil = dict[key]?.append(el) { dict[key] = [el] } 
    } 
    return dict 
    } 
} 

如何做同樣的與客觀C

+2

在Objective C中,你想做什麼? – user3182143

+0

與該代碼相同@ user3182143 – iOSGeek

+0

@iOSGeek我對於仍在學習它的swift代碼並不熟悉。你能否向我解釋一下你添加的代碼段會做什麼? – Arun

回答

1

在目標C相同的結果我試着這個爲你的問題,我現在得到了解決方案。它工作正常。

NSArray *array = @[@{@"name" : @"lunch", @"date" : @"01-01-2015" , @"hours" : @"1"}, 
        @{@"name" : @"dinner", @"date" : @"01-01-2015" , @"hours" : @"1"}, 
        @{@"name" : @"dinner", @"date" : @"01-01-2015" , @"hours" : @"1"}, 
        @{@"name" : @"lunch", @"date" : @"01-01-2015" , @"hours" : @"1"}, 
        @{@"name" : @"dinner", @"date" : @"01-01-2015" , @"hours" : @"1"}, 
        ]; 

NSMutableArray *resultLunchArray = [NSMutableArray new]; 
NSMutableArray *resultDinnerArray = [NSMutableArray new]; 
NSMutableArray *finalResultsArray = [NSMutableArray new]; 
NSArray *groupLunch = [array valueForKeyPath:@"@distinctUnionOfObjects.name"]; 
for (NSString *str in groupLunch) 
{ 
    NSArray *groupNames = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"name = %@", str]]; 
    if([str isEqualToString:@"lunch"]) 
    { 
     for (int i = 0; i < groupNames.count; i++) 
     { 
     NSString *nameLunch = [[groupNames objectAtIndex:i] objectForKey:@"name"]; 
     NSString *dateLunch = [[groupNames objectAtIndex:i] objectForKey:@"date"]; 
     NSString *strNameLunch = [NSString stringWithFormat:@"%@ : %@",nameLunch,dateLunch]; 
     [resultLunchArray addObject:strNameLunch]; 
     } 
     [finalResultsArray addObject:resultLunchArray]; 
    } 
    else{ 
     for (int i = 0; i < groupNames.count; i++) 
     { 
      NSString *nameDinner = [[groupNames objectAtIndex:i] objectForKey:@"name"]; 
      NSString *dateDinner = [[groupNames objectAtIndex:i] objectForKey:@"date"]; 
      NSString *strNameDinner = [NSString stringWithFormat:@"%@ : %@",nameDinner,dateDinner]; 
      [resultDinnerArray addObject:strNameDinner]; 
     } 
     [finalResultsArray addObject:resultDinnerArray]; 
    } 
} 
NSLog(@"The final results are - %@",finalResultsArray); 

輸出Reults是

The final results are - (
    (
    "lunch : 01-01-2015", 
    "lunch : 01-01-2015" 
), 
    (
    "dinner : 01-01-2015", 
    "dinner : 01-01-2015", 
    "dinner : 01-01-2015" 
) 
)