2016-11-18 54 views

回答

0

請參考下面的解決方案,但請檢查使用set而不是在原來的代碼陣的最初目的。如果最初使用set,則您將做出的更改可能會降低性能: 防止重複或者檢查對象是否存在於循環內部.. Array和Set具有相同的方法名稱包含:但巨大差異性能。

for (NSNumber *number in myArray) { 

    if([myArrayOfCategories containsObject:@9]){ //O(n) worst look up 
     ///do sthg 
    } 
} 

for (NSNumber *number in myArray) { 

    if([mySetOfCategories containsObject:@9]){ //O(1) fast lookup 
     ///do sthg 
    } 
} 


//Solution 


NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]; 
NSArray* content = [filteredSubcategories objectsAtIndexes:indexSet]; 
0

無論是創建set作爲OP和獲得它的數組表示,像這樣:

NSSet *set = [NSOrderedSet orderedSetWithOrderedSet:filteredSubcategories //... as in the OP 
NSArray *array = [set array]; 

或者,如果您不需要set,只是小範圍filteredSubcategories數組表示,像這樣的:

NSArray *array = [[filteredSubcategories array] subarrayWithRange:[range rangeValue]];