2017-02-21 2 views
0

Я пытаюсь искать и объединять объекты в нескольких NSArray's.iOS sdk NSArray в NSArray найти и слить

В основном NSArray, который имеет несколько NSArray с 1 объектом, а затем NSDictionary. Я хочу проверить, существует ли объект уже и объединить его с существующим объектом, поэтому это будет NSSArray с NSArray с 1 объектом, а затем несколькими NSDictionary. В Objective-c.

(
    (
    "The Essential: Céline Dion", 
    { 
     "album": "The Essential: Céline Dion", 
     "artwork": "<UIImage: 0x608000087210>, {512, 506}", 
     "title": "It's All Coming Back to Me Now" 
    } 
), 
    (
    "Ah Via Musicom", 
    { 
     "album": "Ah Via Musicom", 
     "artwork": "<UIImage: 0x60000008a6e0>, {600, 600}", 
     "title": "Cliffs of Dover" 
    } 
), 
    (
    "Tears Roll Down (Greatest Hits 82-92)", 
    { 
     "album": "Tears Roll Down (Greatest Hits 82-92)", 
     "artwork": "<UIImage: 0x6080000887a0>, {512, 512}", 
     "title": "Everybody Wants to Rule the World" 
    } 
), 
    (
    "No Money - Single", 
    { 
     "album": "No Money - Single", 
     "artwork": "<UIImage: 0x6080000845b0>, {600, 600}", 
     "title": "No Money" 
    } 
), 
    (
    "Tears Roll Down (Greatest Hits 82-92)", 
    { 
     "album": "Tears Roll Down (Greatest Hits 82-92)", 
     "artwork": "<UIImage: 0x60800008d5c0>, {512, 512}", 
     "title": "Shout" 
    } 
), 
    (
    "STAB!", 
    { 
     "album": "STAB!", 
     "artwork": "<UIImage: 0x60800008da20>, {512, 512}", 
     "title": "Will You Remember Me?" 
    } 
), 
    (
    "Life After Sundown", 
    { 
     "album": "Life After Sundown", 
     "artwork": "<UIImage: 0x60000008d840>, {600, 600}", 
     "title": "Werewolves On Wheels" 
    } 
) 
) 

к этому

(
    (
    "The Essential: Céline Dion", 
    { 
     "album": "The Essential: Céline Dion", 
     "artwork": "<UIImage: 0x608000087210>, {512, 506}", 
     "title": "It's All Coming Back to Me Now" 
    } 
), 
    (
    "Ah Via Musicom", 
    { 
     "album": "Ah Via Musicom", 
     "artwork": "<UIImage: 0x60000008a6e0>, {600, 600}", 
     "title": "Cliffs of Dover" 
    } 
), 
    (
    "Tears Roll Down (Greatest Hits 82-92)", 
    { 
     "album": "Tears Roll Down (Greatest Hits 82-92)", 
     "artwork": "<UIImage: 0x6080000887a0>, {512, 512}", 
     "title": "Everybody Wants to Rule the World" 
    }, 
    { 
     "album": "Tears Roll Down (Greatest Hits 82-92)", 
     "artwork": "<UIImage: 0x60800008d5c0>, {512, 512}", 
     "title": "Shout" 
    } 
), 
    (
    "No Money - Single", 
    { 
     "album": "No Money - Single", 
     "artwork": "<UIImage: 0x6080000845b0>, {600, 600}", 
     "title": "No Money" 
    } 
), 
    (
    "STAB!", 
    { 
     "album": "STAB!", 
     "artwork": "<UIImage: 0x60800008da20>, {512, 512}", 
     "title": "Will You Remember Me?" 
    } 
), 
    (
    "Life After Sundown", 
    { 
     "album": "Life After Sundown", 
     "artwork": "<UIImage: 0x60000008d840>, {600, 600}", 
     "title": "Werewolves On Wheels" 
    } 
) 
) 
+1

Образцы не совпадают. Второй показывает, что Tears Roll Down (Greatest Hits 82-92) слились вместе, как я этого хочу. – ipodtouchdude

ответ

1

Назовём исходный массив массиву mainArray.

Сначала вы собираете уникальные имена от этого mainArray.

NSMutableArray *uniqueNames = [NSMutableArray array]; 

for (NSArray *sub in mainArray) { 
    NSString *name = [sub firstObject]; 
    BOOL isDuplicate = [[uniqueNames filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF contains %@",name]] count] > 0; 
    if (!isDuplicate) { 
     [uniqueNames addObject:name]; 
    } 
} 

После этого цикл через uniqueNames массива и поиск дубликатов в вашем mainArray и повторно структура вашего массива.

NSMutableArray *final = [NSMutableArray array]; 
for (NSString *name in uniqueNames) { 
    NSPredicate *namePredicate = [NSPredicate predicateWithFormat:@"SELF contains %@",name]; 
    NSArray *duplicateArrays = [mainArray filteredArrayUsingPredicate:namePredicate]; 
    if ([duplicateArrays count] > 1) { 
     NSMutableArray *newArray = [NSMutableArray arrayWithObject:name]; 
     for (NSArray *duplicateArray in duplicateArrays) { 
      [newArray addObject:[duplicateArray lastObject]]; 
     } 
     [final addObject:newArray]; 
    } 
    else{ 
     [final addObject:duplicateArrays]; 
    } 
} 

Здесь находится массив final.

Смежные вопросы