2012-04-23 24 views
5

estoy trabajando en SQLite y me han escrito una consulta que me devuelve dos arrays ItemsArray y CustomersIDArray como:¿Cómo encontrar valores duplicados en matrices?

ItemsArray 
Element at Index 0 = Off White, 
Element at Index 1 = Fan, 
Element at Index 2 = Off White, 
Element at Index 3 = Delux, 
Element at Index 4 = Fan 

CustomerIDArray 
Element at Index 0 = 1, 
Element at Index 1 = 2, 
Element at Index 2 = 2, 
Element at Index 3 = 3, 
Element at Index 4 = 4 

Quiero dar lugar al igual que los Off White = 2 (cuenta), Fan = 2 (cuenta) y Delux = 1; y la matriz resultante,

Result Array 
Element at Index 0 = Off White, 
Element at Index 1 = Fan, 
Element at Index 2 = Delux 

En realidad quiero que el recuento de repetición en la primera matriz, pero el valor no debe mismo para CustomerArray. Por favor, ayúdenme a través de la lógica o el código.

+0

Pruebe la solución provista en esta pregunta: (http://stackoverflow.com/questions/6841072/how-to-count-duplicates-values-in-nsarray) – iNoob

+0

@INoob Estimado/a, no sé cómo usar NSCountedSet .. Puede usted por favor decirme ? –

+0

Pruebe la respuesta aquí: http://stackoverflow.com/a/7606138/876283 – iNoob

Respuesta

3
-(NSMutableArray *)getCountAndRemoveMultiples:(NSMutableArray *)array{ 

    NSMutableArray *newArray = [[NSMutableArray alloc]initWithArray:(NSArray *)array]; 
    NSMutableArray *countArray = [NSMutableArray new]; 
    int countInt = 1; 
    for (int i = 0; i < newArray.count; ++i) { 
     NSString *string = [newArray objectAtIndex:i]; 
     for (int j = i+1; j < newArray.count; ++j) { 
      if ([string isEqualToString:[newArray objectAtIndex:j]]) { 
       [newArray removeObjectAtIndex:j]; 
       countInt++; 
      } 
     } 
     [countArray addObject:[NSNumber numberWithInt:countInt]]; 
     countInt = 1; 
    } 
    NSMutableArray *finalArray = [[NSMutableArray alloc] initWithObjects:newArray, countArray, nil]; 
    NSLog(@"%@", finalArray); 
    return finalArray; 

} 
- (IBAction)getArrayInfo:(id)sender { 
    NSMutableArray *myArray = [[NSMutableArray alloc] initWithObjects:@"Off White", @"Fan", @"Off White", @"Deluxe", @"Fan", nil]; 
    NSMutableArray *godArray = [self getCountAndRemoveMultiples:myArray]; 
    NSLog(@"Array from this end = %@", godArray); 
} 

Acabo de crear -getArrayInfo para probarlo. Funciona bien. Como puede ver, la matriz que desea visualizar estará en index: 0 y countArray en index: 1.

+0

, es un trabajo realmente bueno. Confirmo algunos cambios según mi opinión ... Thumbs up :) –

+0

Tengo otro problema ¿me pueden ayudar? –

+0

Sure-- publique una pregunta y deje un enlace como comentario aquí. – AMayes

0

probar esto:

NSArray *copy = [ItemsArray copy]; 

NSInteger index = [copy count] - 1; 

for (id object in [copy reverseObjectEnumerator]) { 

    if ([ItemsArray indexOfObject:object inRange:NSMakeRange(0, index)] != NSNotFound) { 
     [ItemsArray removeObjectAtIndex:index]; 
    } 
    index--; 
} 
+0

Estoy usando NSMutableArray también funcionará para eso? –

+0

¿qué tal intentar con pequeños cambios al código que publiqué arriba ... – chewy

+0

I Cambiarlo y funciona para mí. Sus elementos de actualización Array. Pero también quiero contar los artículos repetidos. –

1

Uso NSCountedSet, como a continuación

NSMutableArray *ary_res = [[NSMutableArray alloc] init]; 
    NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"11",@"13",@"34",@"9",@"13",@"34",@"9",@"2",nil]; 
    NSCountedSet *set = [[NSCountedSet alloc] initWithArray:array]; 
    for(id name in set) 
    { 
     if([set countForObject:name]==2) 
      [ary_res addObject:name]; 
    } 
    // 
    NSLog(@"%@",ary_res); 
+0

Necesito dar como resultado Array si dos veces y luego guardar 2 nuevamente ese elemento si tres guardan 3 si uno luego 1. –

+0

@AmirIphone significa que si "Off White" 3 veces, entonces también desea una vez ... – Narayana

+0

Sí ... bu También quiero saber cuántas veces viene en el Array –

Cuestiones relacionadas