2010-10-19 41 views
10

如何刪除nsarray中的重複項。例如我的數組包含以下數據。我想比較相鄰的日期以避免重複,但它通過錯誤。刪除nsarray中的重複項

誰能指導我什麼,我錯了

日曆一線

( 
2010-09-25 17:00:00 GMT, 
"AAA", 
2010-09-25 17:00:00 GMT, 
"AAA", 
2010-09-26 17:00:00 GMT, 
"BBB", 
2010-09-26 17:00:00 GMT, 
"BBB", 
2010-09-27 17:00:00 GMT, 
"CCCC", 
2010-09-27 17:00:00 GMT, 
"CCC", 
2010-09-28 17:00:00 GMT, 
"AAA", 
2010-09-28 17:00:00 GMT, 
"AAA", 
2010-09-29 17:00:00 GMT, 
"DDDD", 
2010-09-29 17:00:00 GMT, 
"DDDD", 
2010-09-30 17:00:00 GMT, 
"BBBB" 
) 

我的代碼

NSArray dates; //dates contain above values 
NSMutableArray *temp_date = [[NSMutableArray alloc] init]; 

for (int i=0; i<[dates count]; i+=2){ 
    BOOL day; 

    if ([dates count]-2 >i) { 
     day = [[dates objectAtIndex:i] compare:[dates objectAtIndex:i+2]]; 
    } 

    if (day) { 
     [temp_date addObject:[dates objectAtIndex:i]]; 
     [temp_date addObject:[dates objectAtIndex:i+1] ]; 
    } 
} 

問候, Sathish所在

+0

那你試試,什麼是你的錯誤? – willcodejavaforfood 2010-10-19 08:44:21

+0

我在我的文章中添加了代碼 – 2010-10-19 08:49:25

+0

你想說數組是全部字符串嗎?或交替NSDates和字符串? – 2010-10-19 08:49:41

回答

45

你可以使用集合。創建時會自動刪除重複項。

NSArray *cleanedArray = [[NSSet setWithArray:dates] allObjects]; 

請記住,一組是無序的。

按照布倫特的評論,這個問題的更近的解決方案將允許您保持元素的有序性。

[[NSOrderedSet orderedSetWithArray:dates] array] 
+0

約瑟夫的問題是它是日期是2d數組[[日期1 - 值],[日期1 - 值],[日期2 - 值]]我已經刪除重複的日期單獨和相應的值應該是這樣。我的意思是數組具有連續的值(日期,值,日期,值等)。 – 2010-10-19 09:34:43

+0

你想結束每個日期只有一個值?或者如果數值不同,是否可以多次存儲數組中的某個日期? – 2010-10-19 09:43:09

+0

是的約瑟夫 - 它應該以一個價值結束。例如2日期具有相同的值,只有我們已經刪除其中一個(但價值可以複製它不應該被刪除)(我的意思只是在二維數組中的日期聯合) – 2010-10-19 09:48:23

1

要找到相同的,你應該對象更好地使用–indexOfObjectIdenticalTo:或 - indexOfObjectIdenticalTo:inRange:

+0

謝謝eviltrue – 2010-10-20 04:04:38

1

如果您使用了mutableArray,請使用此參數。

NSArray *copy = [mutableArray copy]; 

NSInteger index = [copy count] - 1; 

for (id object in [copy reverseObjectEnumerator]) { 

    if ([mutableArray indexOfObject:object inRange:NSMakeRange(0, index)] != NSNotFound) { 
     [mutableArray removeObjectAtIndex:index]; 
    } 
    index--; 
} 
[copy release]; 
5

乾淨的方式

NSArray *noDuplicatesDates = [dates valueForKeyPath:@"@distinctUnionOfObjects.self"];

+0

這很美。謝謝。 – 2016-04-25 21:26:49