Tengo que ordenar / buscar una matriz de diccionarios en función de una matriz de identificadores de etiqueta.

El servicio web envía una lista de artículos que tienen identificadores de etiqueta como [1,2,3,5] para cada artículo.

El usuario selecciona múltiples etiquetas de una lista y allí los identificadores de etiqueta se almacenan en una matriz como [4,2,8,1]

** Ahora tengo que comparar las etiquetas seleccionadas por el usuario con las etiquetas del artículo y si alguna etiqueta en las 2 matrices coincide, se almacena en una matriz de resultados **

¿Qué debo usar y cómo? NSPredicate o un descriptor de NSSort

En resumen, tengo que hacer algo como esto:

userTags = [4,6,2,1]
articleTags = [1,2,3,4,5]

if ANY [userTags] IN [articleTags] 
  [resultArr addObject:article]
0
Taha Ishfaq Bhutta 6 mar. 2017 a las 14:58

2 respuestas

La mejor respuesta

Creo que debería usar NSSet para su tarea en lugar de NSArrays. Y verifique si los conjuntos se cruzan, por ejemplo:

NSSet *tags = [NSSet setWithArray:@[@1, @3, @5]];

NSSet *article1 = [NSSet setWithArray:@[@2, @4, @6]];
NSSet *article2 = [NSSet setWithArray:@[@2, @3, @4]];
NSLog(@"%d", [tags intersectsSet:article1]);
// 0
NSLog(@"%d", [tags intersectsSet:article2]);
// 1
1
Mindaugas 6 mar. 2017 a las 12:29

La respuesta de Mindaugas funcionó.

NSSet *selectedTagSet = [NSSet setWithArray:selectedTagIds];
NSMutableArray *result = [NSMutableArray array];

for (int i = 0; i < [self.responceArray count]; i++) {

    NSMutableDictionary *dict = [self.responceArray objectAtIndex:i];

    NSSet *tagSet = [NSSet setWithArray:[[dict objectForKey:@"seller"] objectForKey:@"tags"]];

    if ([tagSet intersectsSet:selectedTagSet])
    {
        [result addObject:[self.responceArray objectAtIndex:i]];
    }

}
0
Taha Ishfaq Bhutta 6 mar. 2017 a las 13:04