2012-07-01 16 views
2

我新的iOS開發者,我想比較和改變屬性如何比較數組?並更改屬性?

數組1 =(object1,對象2,object3,object4) 數組2 =(對象2,object4,object5,object8)

比較數組1和Array2 如果Array2中有相同的對象,請更改對象中的屬性。

在這種情況下上面,對象2和Object4應該改變..

我應該怎麼辦?

請幫助我!

回答

3

您可以使用設置此

NSMutableSet *array1Set = [NSMutableSet setWithArray:array1]; 
NSSet *array2Set = [NSSet setWithArray:array2]; 
[array1Set intersectSet:array2Set]; 

你現在有一組只是這是在兩個數組的對象。 現在你可以在集上使用enumerateObjectsUsingBlock:來操縱對象或將集轉換回數組NSArray *filteredArray = [array1Set allObjects]

+0

很好的解決方案。看到所有可能的方法如何在性能方面進行疊加,會有點兒有趣。 – jrturton

+0

看看例如。在這裏:[什麼時候使用NSSet而不是NSArray更好](http://stackoverflow.com/questions/10997404/when-is-it-better-to-use-a-nsset-rather-than-a -nsarray) – Pfitz

0

我認爲你必須在這種情況下搜索n*n。遍歷Array1中的每個對象,都有一個嵌套循環,並將Array2中的每個項目與當前對象(在Array1中)進行比較。如果他們相同,那就改變你的屬性。

for (int i = 0; i < [array1 count]; i++) 
    for (int j = 0; j < [array2 count]; j++) 
     if ([array1 objectAtIndex:i] == [array2 objectAtIndex:j]) { 
      // do yo thangs 
     } 
1

您可以使用快速列舉通過陣列2,然後用containsObject:來檢查它是否屬於陣列1:

for (id object in array2) 
{ 
    if ([array1 containsObject:object]) 
    { 
     // change your settings here 
    } 

你也可以創建一個使用filteredArrayUsingPredicate:一個新的陣列,或獲取指數匹配對象的路徑使用indexesOfObjectsPassingTest:。你還沒有說過陣列中可能有多少物體,所以我不知道性能是否會成爲問題。