2011-11-24 28 views
2

標題幾乎說明了一切,但只是澄清:我有一個NSMutableDictonary包含幾個NSMutableArrays。我想要做的是找到任何存在於多個數組中的值(在一個數組中不會有任何重複)並返回該值。有人可以幫忙嗎?提前致謝!如何在NSArrays的NSDictionary中查找(不刪除)重複項?

編輯:爲了清楚起見,我會指定一些我的變量:
linesMutableDictionary包含行對象的列表(這是一個自定義我的NSObject的子類)

pointsArray是每行對象內部的數組幷包含我正在嘗試搜索的值。

基本上我試圖找出哪條線路有着共同的點(我的應用程序的目的是基於幾何)

+0

我可以看到'Line'的接口定義嗎? – DanZimm

+0

@interface行:NSObject NSMutableArray * pointsArray; } – Garrett

+0

您是否將某些按鍵設置爲不同的線對象? – DanZimm

回答

2
- (NSValue*)checkForDupes:(NSMutableDictionary*)dict { 
    NSMutableArray *derp = [NSMutableArray array]; 
    for (NSString *key in [dict allKeys]) { 
     Line *temp = (Line*)[dict objectForKey:key]; 
     for (NSValue *val in [temp pointsArray]) { 
      if ([derp containsObject:val]) 
       return val; 
     } 
     [derp addObjectsFromArray:[temp pointsArray]]; 
    } 
    return nil; 
} 

這應該工作

+0

感謝您的快速響應!不過,我相信你誤解了我的問題(或者我誤解了你的代碼)。我編輯了我的問題以澄清 – Garrett

+0

非常感謝您的答覆和對我的錯誤的寬容! – Garrett

+0

沒問題!希望一切順利快樂的火雞日! – DanZimm

2

如果重複你要回到YESisEqual:你可以首先製作所有元素的NSSet(根據定義,NSSet不能有重複):

NSMutableSet* allElements = [[NSMutableSet alloc] init]; 
for (NSArray* array in [dictionary allValues]) { 
    [allElements addObjectsFromArray:array]; 
} 

現在你通過元素循環,並檢查它們是否在多個陣列

NSMutableSet* allDuplicateElements = [[NSMutableSet alloc] init]; 
for (NSObject* element in allElements) { 
    NSUInteger count = 0; 
    for (NSArray* array in [dictionary allValues]) { 
     if ([array containsObject:element]) count++; 
     if (count > 1) { 
      [allDuplicateElements addObject:element]; 
      break; 
     } 
    } 
} 

然後你有重複的元素,不要忘記釋放allElementsallDuplicateElements

+0

這將是一組數組,而不是數組中的一組元素。 – jbat100

+0

你是對的。抱歉。 – vikingosegundo

+0

對不起,但我原來的問題是錯誤的,我的意思是這段代碼不起作用。我編輯了我的問題來糾正我的錯誤。你能告訴我如何編輯你的代碼現在的工作? – Garrett