2012-04-23 6 views
5

Я работаю на SQLite и я написал запрос, который возвращает меня два массива ItemsArray и CustomersIDArray как:Как найти повторяющиеся значения в массивах?

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 

Я хочу привести подобные Кремовому = 2 (количество), Fan = 2 (количество) и Delux = 1; и результирующая матрица,

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

На самом деле я хочу, чтобы количество повторений в первом массиве, но значение не должно же для CustomerArray. Пожалуйста, помогите мне через логику или код.

+0

Попробуйте найти решение по этому вопросу: (http://stackoverflow.com/questions/6841072/how-to-count-duplicates-values-in-nsarray) – iNoob

+0

@INoob Уважаемый, я не знаю, как использовать NSCountedSet .. Не могли бы вы рассказать мне? –

+0

Попробуйте ответить здесь: http://stackoverflow.com/a/7606138/876283 – iNoob

ответ

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); 
} 

Я просто настроить -getArrayInfo, чтобы проверить его. Работает отлично. Как вы можете видеть, массив, который вы хотите отобразить, будет иметь индекс: 0, а countArray - по индексу: 1.

+0

его действительно хорошая работа. Я совершаю некоторые изменения в соответствии со мной ... Thumbs up :) –

+0

У меня есть еще одна проблема, вы можете мне помочь? –

+0

Уверен, оставлять ссылку на него как комментарий здесь. – AMayes

0

попробовать это:

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

Я использую NSMutableArray, он тоже будет работать для этого? –

+0

Как пробовать с небольшим изменением кода, который я разместил выше ... – chewy

+0

Я меняю его и его работы для меня. Его обновление Элементы Array. Но я также хочу, чтобы количество повторяющихся элементов. –

1

NSCountedSet Использование, как показано ниже

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

Мне нужен результат в массиве, если два раза затем сохраните 2 снова этот элемент, если три сохраняют 3, если один из них 1. –

+0

@AmirIphone означает, что если вы «Off White» 3 раза, а затем и хотите один раз ... – Narayana

+0

Да ... bu t также хочу знать, сколько раз он приходит в Array –

Смежные вопросы