41647
例えばNSArray内のlastNameというkeyのvalueが重複している場合にどちらか一方を残し、一方を削除したい場合、どのような方法が一般的なんでしょうか。よろしくお願いいたします。

```

    NSArray *array = @[ @{@"firstName" : @"Michael",
                          @"lastName"  : @"Jackson"},
    
                        @{@"firstName" : @"Whitney",
                          @"lastName"  : @"Houston"},
    
                        @{@"firstName" : @"Janet",
                          @"lastName"  : @"Jackson"}];
    
```
CC BY-SA 3.0
2018-02-11T03:02:54.727
41639
2018-02-11T06:56:20.683
2018-02-11T04:24:05.393
19482
19482
question
objective-c
NSArray内にあるNSDictionaryのValueの重複を削除する方法
特に「一般的」な方法と言うのはありません。何らかの方法で重複を見つけてやり、重複していれば削除、と言った処理を書いてやる必要があります。

ご質問では「どちらか一方を」としか書いていませんが、最初の要素のみを残すことにすると、例えばこんなコードが書けます。

```

    NSArray *array = @[ @{@"firstName" : @"Michael",
                          @"lastName"  : @"Jackson"},
    
                        @{@"firstName" : @"Whitney",
                          @"lastName"  : @"Houston"},
    
                        @{@"firstName" : @"Janet",
                          @"lastName"  : @"Jackson"}];
    
    NSMutableSet *lastNameSet = [NSMutableSet set];
    
    NSMutableArray *resultArray = [NSMutableArray array];
    
    for( NSDictionary *entry in array ) {
        NSString *lastName = [entry objectForKey:@"lastName"];
        if( ![lastNameSet containsObject: lastName] ) {
            [resultArray addObject:entry];
            [lastNameSet addObject:lastName];
        }
    }
    
    NSLog(@"resultArray=%@", resultArray);
    
```

`lastNameSet`という名称の`NSMutableSet`に既に存在する`lastName`を入れていくことにより重複を管理しています。

既に存在するかどうかを管理しながら、存在しなければ新しい配列に要素を追加するということをしているだけです。元が`NSMutableArray`の場合には、新しいArrayを作るのではなく、不要な要素を削除するようなコードを書きたいかもしれませんが、配列の要素数が多い場合、新しい配列に必要な要素を足していく方が速度的にも有利です。
CC BY-SA 3.0
2018-02-11T06:56:20.683
41647
2018-02-11T06:56:20.683
13972
41639
answer