2011-09-05 54 views
2
NSLog(@"Ci sono %d categorie",category.count); 
for(int c=0; c<category.count; c++){ 
CategoryArray * element =[category objectAtIndex:c]; 
NSLog(@"******************************"); 
NSLog(@"Titolo %@",element.label); 
NSLog(@"Source %@",element.url); 
NSLog(@"******************************"); 
[element release]; 

這是我的代碼!我需要刪除所有重複數組...我使用這段代碼,但我不明白爲什麼它不起作用。NSMutableArray刪除重複的項目

uniquearray = [[NSSet setWithArray:category] allObjects]; 
+0

評論此行【元素髮布】; –

+0

檢查[此] [1] [1]:http://stackoverflow.com/questions/1025674/the-best-way-to-remove-duplicate-values-from-nsmutablearray-in- objective-c –

回答

1

你可以使用下面的代碼。

NSMutableArray* filterResults = [[NSMutableArray alloc] init]; 
BOOL copy; 

if (![category count] == 0) { 
    for (CategoryArray *a1 in category) { 
     copy = YES; 
     for (CategoryArray *a2 in filterResults) { 
      if ([a1.label isEqualToString:a2.label] && [a1.url isEqualToString:a2.url]) { 
       copy = NO; 
       break; 
      } 
     } 
     if (copy) { 
     [filterResults addObject:a1]; 
     } 
    } 
} 

而且您將得到沒有重複值的類別數組。
你可以看到編輯的代碼。我認爲這會起作用。

+0

不起作用!類別數組有相同的263個元素 –

2

Set不能包含任何重複的記錄。它使用散列來區分它們,如果散列相同,將使用isEqual(請參閱Rudy Velthuis的評論)。

+0

不只是一個散列。它首先使用散列,即。不同的散列意味着不同。但是使用isEqual必須進一步調查具有相同哈希的項目。 –

5

您的代碼確實有效。試試這個:

NSArray *a = [NSArray arrayWithObjects:@"a", @"b", @"c", @"d", @"b", @"b", @"d", nil]; 
NSLog(@"a: %@\ndistinctA: %@", a, [[NSSet setWithArray:a] allObjects]); 

輸出是:

a: (
    a, 
    b, 
    c, 
    d, 
    b, 
    b, 
    d 
) 
distinctA: (
    c, 
    d, 
    a, 
    b 
) 

知道該代碼適用於包含重複對象的數組,你現在不得不懷疑,你認爲是重複的不被認爲爲什麼對象是這樣。關於散列和isEqual的現有答案指出你在正確的方向。

+0

我試過這個,並且工作得很好,節省了我很多時間.... –

+0

很好的爲我工作 –

+0

請注意,此方法更改數組中項目的原始順序。 – ivanzoid

0

如果您擔心訂單,那麼您可以這樣做。

NSArray * newArray = [[NSOrderedSet orderedSetWithArray:oldArray] array]; // iOS 5.0及更高版本