2015-02-24 89 views
0

很難解釋爲什麼我需要在數組中重複索引元素。當我試圖獲取傳統方式元素的索引,僅顯示一個指數,但我需要獲取對前重複的所有索引值 :在NSArray中查找所有重複元素的索引

NSArray *[email protected][@"one",@"one",@"one",@"two",@"two",@"four",@"four",@"four"]; 
int index = [array indexOfObject:element]; 
NSLog(@"index %d",index); 

在這裏,如果我嘗試獲取的「one指數「這表明指數,但我需要得到的one

+0

你想要所有的索引作爲匹配索引或單個索引的數組。 – Nagarajan 2015-02-24 06:35:39

回答

2

進一步索引可以取重複的指標是這樣的:

NSArray *[email protected][@"one",@"one",@"one",@"two",@"two",@"four",@"four",@"four"]; 
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) 
{ 
    if ([obj isEqualToString:@"one"]) 
    { 
     NSLog(@"index %d",idx); 

    } 
}]; 
+0

如果數組已經排序,肯定會有效☺️ – runmad 2015-11-30 14:35:31

+0

它不會對這個數組進行排序 – 2015-12-24 08:19:27

1
int i,count=0; 
for (i = 0; i < [array count]; i++) { 
    if element == [array objectAtIndex:i] { 
     indices[count++] = i; 
    } 
} 

聲明一個空數組索引,索引將包含給定元素的所有索引。

2
NSString *element = @"one"; 
NSArray *[email protected][@"one",@"one",@"one",@"two",@"two",@"four",@"four",@"four"]; 

NSIndexSet *matchingIndexes = [array indexesOfObjectsPassingTest:^BOOL(NSString *obj, NSUInteger idx, BOOL *stop) { 
    return [obj isEqual:element]; 
}]; 

[matchingIndexes enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) { 
    NSLog(@"%ld", (long)idx); 
}]; 
1

最終我不認爲NSArray方法會幫助你在這裏,所以你將不得不寫一些非常基本的代碼。可能有一個更清晰的答案,但這是一個相當簡單的解決方案。

這只是通過數組,併爲每個唯一編號創建一個NSDictionary。它假定數組按照您的示例進行排序,因此只需將先前索引的值與當前索引進行比較,以查看它們是否已更改。當它們改變時,它知道它是用這個值完成的,並將字典保存到一個數組中。

NSArray *[email protected][@"one",@"one",@"one",@"two",@"two",@"four",@"four",@"four"]; 
NSString *priorString = array[0]; 
NSMutableDictionary *duplicatesByKey = [[NSMutableDictionary alloc] init]; 
NSMutableArray *indexesOfDuplicates = [[NSMutableArray alloc] init]; 

int index = 0; 
for (NSString *string in array) { 
    if ([priorString isEqualToString:string]) { 
     [indexesOfDuplicates addObject:[NSNumber numberWithInt:index]]; 
    } else { 
     [duplicatesByKey setObject:indexesOfDuplicates forKey:priorString]; 
     indexesOfDuplicates = [[NSMutableArray alloc] init]; 
     [indexesOfDuplicates addObject:[NSNumber numberWithInt:index]]; 
    } 
    priorString = string; 
    index ++; 
} 
[duplicatesByKey setObject:indexesOfDuplicates forKey:priorString]; 

我希望有幫助。