NSMutableArray 将对象保留在 indexSet
NSMutableArray keep objects at indexSet
我在 Xcode 8.2,OSX 不是 iOS,Objective-C
我有一个 NSMutableArray 和一个 NSIndexSet。我想删除数组中除 NSIndexSet 中的所有项之外的所有项。所以基本上是
[array keepObjectsAtIndexes:indexSet]; // just to carify i know this doesnt exist
最好的方法是什么?我能以某种方式 'reverse' 设置索引吗?
您可以使用 objectsAtIndexes
获取对象并用结果替换整个对象。
NSArray *temp = [array objectsAtIndexes:indexSet];
[array replaceObjectsInRange:NSMakeRange(0, array.count) withObjectsFromArray: temp];
您可以构造给定 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
)
干杯
我在 Xcode 8.2,OSX 不是 iOS,Objective-C
我有一个 NSMutableArray 和一个 NSIndexSet。我想删除数组中除 NSIndexSet 中的所有项之外的所有项。所以基本上是
[array keepObjectsAtIndexes:indexSet]; // just to carify i know this doesnt exist
最好的方法是什么?我能以某种方式 'reverse' 设置索引吗?
您可以使用 objectsAtIndexes
获取对象并用结果替换整个对象。
NSArray *temp = [array objectsAtIndexes:indexSet];
[array replaceObjectsInRange:NSMakeRange(0, array.count) withObjectsFromArray: temp];
您可以构造给定 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
)
干杯