-1

我有一个包含在 NSmutableArray 和 Dictionary 中的 JSON 结果,我想知道如何迭代和比较相同的键值(id_sucursal在我的情况下)并将其保存在 Array 中以创建集群注释。下面是 JSON 结果:

    {
    ancla = 1;
    categoria = 12;
    descripcion = "Gur\U00fa Ofertas te trae un 15% de descuento* en todos los platos o un postre* de cortes\U00eda en el Centro Cultural Mediterr\U00e1neo La Gloria";
    descuento = 16;
    "id_cupon" = 540;
    "id_sucursal" = 45;
    lat = "4.63323";
    lon = "-74.144474";
    premium = "<null>";
    rutaimagen = "ruta/imagen/14";
    tipooferta = "% Descuento";
    titulo = "Decoraciones del hogar Home Center";
    zona = 2;
},
    {
    ancla = "<null>";
    categoria = 4;
    descripcion = "$50.000 en vez de $120.000 por noche romantica para dos personas. Incluye cena romantica+champa\U00f1a+acomodaci\U00f3n en cama doble";
    descuento = 61;
    "id_cupon" = 536;
    "id_sucursal" = 50;
    lat = "4.669106";
    lon = "-74.043949";
    premium = 1;
    rutaimagen = "ruta/imagen/7";
    tipooferta = "% Descuento";
    titulo = "Lavado de autos Splash";
    zona = 1;
},
    {
    ancla = "<null>";
    categoria = 3;
    descripcion = "Durante el mes de septiembre lleva uno de nuestros colchones Elegance por tan solo $429.000. Precio normal: $858.000. Te lo llevamos hasta la puerta de tu casa \U00a1y no te cuesta m\U00e1s!";
    descuento = 51;
    "id_cupon" = 537;
    "id_sucursal" = 54;
    lat = "4.655775";
    lon = "-74.099317";
    premium = 1;
    rutaimagen = "ruta/imagen/11";
    tipooferta = "% Descuento";
    titulo = "Lavado de autos Splash";
    zona = 1;
},
    {
    ancla = "<null>";
    categoria = 4;
    descripcion = "$240.0000 en ves de $480.000 por  3 dias y 4 noche en el Hotel Hilton de Bogot\U00e1 en acomodaci\U00f3n doble";
    descuento = 51;
    "id_cupon" = 535;
    "id_sucursal" = 45;
    lat = "4.63323";
    lon = "-74.144474";
    premium = 1;
    rutaimagen = "ruta/imagen/2";
    tipooferta = "% Descuento";
    titulo = "Lavado de autos Splash";
    zona = 1;
}
4

2 回答 2

2

如果你想要数组中唯一的 NSDictionary 对象,那么我建议你使用 NSSet 而不是 NSArray。

这将帮助您仅将唯一对象添加到 NSSet。它非常易于使用,您需要以下链接,因为我使用 NSMutableSet 解决了这种情况:

NSSet 教程

于 2013-10-08T12:52:12.843 回答
0

将 JSON 更改为 Objective C 结构后,例如使用:

NSArray *mainArray = [NSJSONSerialization JSONObjectWithData: [jsonString dataUsingEncoding:NSUTF8StringEncoding] options: NSJSONReadingMutableContainers error:nil];

你可以这样迭代:

NSMutableArray* duplicates = [NSMutableArray array]; //keeping duplicated entries
NSMutableArray* uniques = [NSMutableArray array]; //to keep track on which ids where visited

for (NSDictionary* dict in mainArray)
{
    NSNumber* id_sucursal = [dict objectForKey:@"id_sucursal"]; //get id of current element
    BOOL isDuplicated = NO;

    for (NSNumber* uniqueId in uniques) //for all visited ids
    {
        if([id_sucursal isEqualToNumber:uniqueId]) //if same id was already found before
        {
            isDuplicated = YES;
            break;
        }
    }

    if(isDuplicated)
    {
         [duplicates addObject:dict]; //add element to duplicated list
    }
    else 
    { 
         [uniques addObject:id_sucursal]; //add id to visited ids 
    }
}
于 2013-10-08T12:47:03.653 回答