2

我在 Xcode 8.2,OSX 不是 iOS,Objective-C

我有一个 NSMutableArray 和一个 NSIndexSet。我想删除数组的所有项目,除了 NSIndexSet 中的项目。所以基本上像

[array keepObjectsAtIndexes:indexSet]; // just to carify i know this doesnt exist

最好的方法是什么?我可以以某种方式“反转”索引集吗?

4

3 回答 3

1

您可以通过构造一个索引集来构造一个给定的倒数,NSIndexSet该索引集包含范围内的所有索引0.. arrayCount-1,包括在内,然后indexSet从中删除您的索引:

NSMutableIndexSet *indexesToRemove = [NSMutableIndexSet initWithIndexesInRange:NSMakeRange(0, array.count)];
[indexesToRemove removeIndexes:indexesToKeep];
[array removeObjectsAtIndexes:indexesToRemove];
于 2017-05-11T10:12:25.070 回答
0

即使不创建不必要的数组,您也可以这样做:

// 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
)

干杯

于 2017-05-11T10:12:41.353 回答
0

您可以获取对象objectsAtIndexes并用结果替换整个对象。

NSArray *temp = [array objectsAtIndexes:indexSet];
[array replaceObjectsInRange:NSMakeRange(0, array.count) withObjectsFromArray: temp];
于 2017-05-11T10:01:15.527 回答