2012-04-23 21 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(算),範= 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 2012-04-23 12:39:25

+0

@INoob親愛的我不知道如何使用NSCountedSet ..你能告訴我嗎? – 2012-04-23 12:45:12

+0

試試這裏的答案:http://stackoverflow.com/a/7606138/876283 – iNoob 2012-04-23 12:50:36

回答

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對它進行測試。工作正常。正如你所看到的,你想要顯示的數組將在index:0處,而countArray在index處:1。

+0

其真正好的工作,我犯了一些根據我的變化...大拇指:) – 2012-04-24 07:26:02

+0

我有另一個問題,你能幫助我嗎? – 2012-04-25 09:30:36

+0

當然 - 發佈一個問題,並留下一個鏈接作爲評論在這裏。 – AMayes 2012-04-25 16:54:33

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它也會工作嗎? – 2012-04-23 12:46:59

+0

如何嘗試小改變我上面發佈的代碼... – chewy 2012-04-23 12:50:13

+0

我改變它和它的作品爲我。它的更新項目數組。但我也想重複項目數。 – 2012-04-23 12:55:37

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。 – 2012-04-23 13:09:53

+0

@AmirIphone意味着如果你「關閉白色」3次然後你也想要一次... – Narayana 2012-04-23 13:14:46

+0

是... bu噸也想知道它有多少次在陣列 – 2012-04-23 13:21:14