0

假设我有一个这样的 NSMutableArray:

对象 0 对象 1 对象 2 对象 3 对象 4

并希望将对象 0 和对象 1 移到对象 4 后面:

对象 2 对象 3 对象 4 对象 0 对象 1

我有这个相当长的代码来实现多个对象的重新排序,但我想知道是否有更直接/优雅的方式:

    int from = 0;
    int to = 5;
    int lastIndexOfObjectsToBeMoved = 1;    
    NSMutableArray *objectsToBeMoved = [[NSMutableArray alloc] init];
    for (int i = from; i < lastIndexOfObjectsToBeMoved; i++) {
        object *o = [self.objects objectAtIndex:i];
        [objectsToBeMoved addObject:o];
    }

    NSUInteger length = lastIndexOfObjectsToBeMoved-from;
    NSRange indicesToBeDeleted = NSMakeRange(from, length);
    [self.objects removeObjectsInRange:indicesToBeDeleted];


    NSIndexSet *targetIndices = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(to, length)];
    [self.objects insertObjects:objectsToBeMoved atIndexes:targetIndices];

编辑:对不起,我应该澄清一下,我并不总是将对象移动到最后,但也希望能够执行诸如将对象 2 和 3 移动到索引 0 之类的事情。

4

2 回答 2

3

将要移到后面的索引创建一个 NSRange。用 抓取这些对象subarrayWithRange,用 删除它们,removeObjectsInRange:然后通过调用将它们添加到末尾addObjectsFromArray:。这是一种更简洁的方式来编写您所拥有的内容。

于 2012-07-24T09:08:36.413 回答
0

rowIndexes 是一个 NSIndexSet ,其中包含您喜欢移动的对象

行是索引目标

NSArray *objectsToMove = [your_array objectsAtIndexes: rowIndexes];

// If any of the removed objects come before the row
// we want to decrement the row appropriately
row -= [rowIndexes countOfIndexesInRange: (NSRange){0, row}];

[your_array removeObjectsAtIndexes:rowIndexes];
[your_array replaceObjectsInRange: (NSRange){row, 0}
       withObjectsFromArray: objectsToMove];

我希望这可以帮助你

于 2013-02-01T11:17:54.323 回答