将NSOrderedSet循环移动到另一个索引

时间:2012-08-15 17:17:21

标签: iphone objective-c cocoa-touch objective-c-category circular-list

我正在开发一个应用程序,它可以处理以循环路径分发的项目。 入口点是随机的。

因此,当整个事情开始时,我需要将所有位置的集合转移到随机索引。

示例(包含任意数据):

0:Hungry -> 1:Eating -> 2:Full -> 3:Vomiting*

如果我将其转移到索引2,我会得到以下新设置。

2:Full -> 3:Vomiting -> 0:Hungry -> 1:Eating

那么如何在Objective C中实现这一目标呢?

*很抱歉,但我需要另一个元素,因为三个元素似乎没有得到重点......

1 个答案:

答案 0 :(得分:0)

我设法通过NSOrderedSet上的类别来解决问题:

NSOrderedSet *newSet = [initialSet orderedSetByShiftingToIndex:2];

这是NSOrderedSet上的类别:

@implementation NSOrderedSet(Shifting)

-(NSOrderedSet *)orderedSetByShiftingToIndex:(int)newIndex{

    if(newIndex == 0 || newIndex > self.count -1){
        return self;
    }

    NSMutableOrderedSet *result = [self mutableCopy];
    NSIndexSet *moveToEnd = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, newIndex -1)];

    int endIndex = result.count-1;

    [result moveObjectsAtIndexes:moveToEnd toIndex:endIndex];

    return result;
}

@end