我在 Xcode 8.2,OSX 不是 iOS,Objective-C
我有一个 NSMutableArray 和一个 NSIndexSet。我想删除数组的所有项目,除了 NSIndexSet 中的项目。所以基本上像
[array keepObjectsAtIndexes:indexSet]; // just to carify i know this doesnt exist
最好的方法是什么?我可以以某种方式“反转”索引集吗?
我在 Xcode 8.2,OSX 不是 iOS,Objective-C
我有一个 NSMutableArray 和一个 NSIndexSet。我想删除数组的所有项目,除了 NSIndexSet 中的项目。所以基本上像
[array keepObjectsAtIndexes:indexSet]; // just to carify i know this doesnt exist
最好的方法是什么?我可以以某种方式“反转”索引集吗?
您可以通过构造一个索引集来构造一个给定的倒数,NSIndexSet
该索引集包含范围内的所有索引0
.. arrayCount-1
,包括在内,然后indexSet
从中删除您的索引:
NSMutableIndexSet *indexesToRemove = [NSMutableIndexSet initWithIndexesInRange:NSMakeRange(0, array.count)];
[indexesToRemove removeIndexes:indexesToKeep];
[array removeObjectsAtIndexes:indexesToRemove];
即使不创建不必要的数组,您也可以这样做:
// Initial array
NSMutableArray* array = [[NSMutableArray alloc] initWithArray:@[@"one", @"two", @"three", @"four", @"five"]];
// Indices we want to keep
NSIndexSet* indexSet = [[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(1, 3)];
// Preparing reversed index set
NSMutableIndexSet *indexSetToRemove = [[NSMutableIndexSet alloc] initWithIndexesInRange:NSMakeRange(0, [array count])];
[indexSetToRemove removeIndexes:indexSet];
// Removing objects from that set
[array removeObjectsAtIndexes:indexSetToRemove];
输出将是:
2017-05-11 20:10:22.317 Untitled 15[46504:32887351] (
two,
three,
four
)
干杯
您可以获取对象objectsAtIndexes
并用结果替换整个对象。
NSArray *temp = [array objectsAtIndexes:indexSet];
[array replaceObjectsInRange:NSMakeRange(0, array.count) withObjectsFromArray: temp];