【问题标题】:NSMutableArray keep objects at indexSetNSMutableArray 将对象保存在 indexSet
【发布时间】:2017-05-11 09:48:54
【问题描述】:

我使用的是 Xcode 8.2,OSX 不是 iOS,Objective-C

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

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

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

【问题讨论】:

  • NSMutableIndexSet *indexSetToRemove = [[NSMutableIndexSet alloc] initWithIndexesInRange:NSMakeRange(0, [array count])] [indexSetToRemove removeIndexes:indexSetToKeep]; [array removeObjectsAtIndexes:indexSetToRemove]; ?

标签: objective-c nsindexset


【解决方案1】:

您可以通过构造一个索引集来构造一个给定NSIndexSet 的逆矩阵,该索引集的所有索引都在0..arrayCount-1 范围内(含),然后从中删除indexSet 中的索引:

NSMutableIndexSet *indexesToRemove = [NSMutableIndexSet initWithIndexesInRange:NSMakeRange(0, array.count)];
[indexesToRemove removeIndexes:indexesToKeep];
[array removeObjectsAtIndexes:indexesToRemove];

【讨论】:

    【解决方案2】:

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

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

    干杯

    【讨论】:

      【解决方案3】:

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

      NSArray *temp = [array objectsAtIndexes:indexSet];
      [array replaceObjectsInRange:NSMakeRange(0, array.count) withObjectsFromArray: temp];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-17
        相关资源
        最近更新 更多