Get individual object objects from NSMutableArray using NSPredicate in iPhone sdk

I have NSMutableArrayone that has an entity class object as its objects. Now I want to remove individual objects from it. Consider the following example.

Entity *entity = [[Entity alloc] init]; 
entity.iUserId = 1;
entity.iUserName = @"Giri"
[arr addObject:entity];

Entity *entity = [[Entity alloc] init]; 
entity.iUserId = 2;
entity.iUserName = @"Sunil"
[arr addObject:entity];

Entity *entity = [[Entity alloc] init]; 
entity.iUserId = 3;
entity.iUserName = @"Giri"
[arr addObject:entity];

Now I want only two objects in Array, removing the duplicate iUserName. I know the iteration path, but I want it to not be repeated, like predicateor in any other way. If anyone knows, then please help me. I tried using [arr valueForKeyPath:@"distinctUnionOfObjects.iUsername"];, but it does not return me an extra object.

, . , , , . NSPredicate , .

+5
2

: , , . , , .

NSMutableArray *filteredArray = [NSMutableArray array];

for (Entity *entity in arr)
{
    BOOL hasDuplicate = [[filteredArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"iUserName == %@", entity.iUserName]] count] > 0;

    if (!hasDuplicate)
    {
        [filteredArray addObject:entity];
    }
}

.

NSSet, Entity NSOrderedSame compareTo:, , .

, O(n^2) .

NSArray *filteredArray = [arr filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(Entity *evaluatedObject, NSDictionary *bindings) {
    return [[arr filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"iUserName == %@", evaluatedObject.iUserName]] count] > 1;
}]];

. , iUserName (, ). , (, ). , , , .

+4

( ).

  • NSSet NSArray.
  • for ( )
  • search iUserName, , .

- :

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"iUserName == 'Giri'"];
NSArray *searchArray = [arr filterUsingPredicate:predicate];
0

All Articles