我正在开发一个应用程序,它可以处理以循环路径分发的项目。 入口点是随机的。
因此,当整个事情开始时,我需要将所有位置的集合转移到随机索引。
示例(包含任意数据):
0:Hungry -> 1:Eating -> 2:Full -> 3:Vomiting*
如果我将其转移到索引2
,我会得到以下新设置。
2:Full -> 3:Vomiting -> 0:Hungry -> 1:Eating
那么如何在Objective C中实现这一目标呢?
*
很抱歉,但我需要另一个元素,因为三个元素似乎没有得到重点......
答案 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