2011-05-07 16 views
5

Tengo NSMutableSet de objetos. Obviamente, todos los objetos son únicos, pero pueden tener el mismo valor .angle, que es propiedad de NSInteger.Buscar objetos con el mismo valor de propiedad en NSMutableSet

Necesito averiguar si hay dos o más objetos con el mismo .angle valor y agruparlos en una matriz.

¿Cómo puedo hacer eso?
Cualquier orientación sería muy apreciada

Respuesta

12

utilizar una instancia de NSPredicate a filtrar en la propiedad que le interesa, por ejemplo:.

NSSet *dogs = [NSSet setWithObjects: 
       [Dog dogWithName:@"Fido" age:2], 
       [Dog dogWithName:@"Fluffy" age: 3], 
       [Dog dogWithName:@"Spot" age:2], 
       nil]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age == %d", 2]; 
NSSet *twoYearOldDogs = [dogs filteredSetUsingPredicate:predicate]; 

NSLog(@"%@", twoYearOldDogs); 
+0

Gracias por el ejemplo NSPredicate. – dredful

+0

Sí, eso es exactamente lo que estaba buscando, gracias. – devster

0

Puede depender de qué tan grande sea su conjunto de datos. Si es grande, puede que tenga que ordenar por .angle y buscar duplicados. La manera simple es simplemente crear una copia del conjunto de datos, iterarlo, para el elemento N, mirar N + 1 al final para todos con el mismo .angle y si se encuentra, eliminarlos de este conjunto de copias y agregarlos al conjunto de resultados.

0

Puede utilizar sortUsingFunction: context: method of NSMutableArray. (Aunque es para ordenar, puede realizar su tarea con mayor eficacia).

NSComparisonResult compare(YourClass *firstObject, YourClass *secondObject, void *context) { 
    if ([firstObject angle] < [secondObject angle]) 
    return NSOrderedAscending; 
    else if ([firstObject angle] > [secondObject angle]) 
    return NSOrderedDescending; 
    else 
    { 
    //Normally here NSOrderedSame is returned. 
    //Put your logic stuff here.i.e. storing object for having common angle. 
    } 
} 

Espero que ayude.

Cuestiones relacionadas