0

循環ルートで配布されるアイテムを操作するアプリケーションに取り組んでいます。エントリーポイントはランダムです。

したがって、すべてが開始したら、すべての位置を含むセットをランダムなインデックスにシフトする必要があります。

(任意のデータを使用):

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

これをインデックスにシフトすると2、次の新しいセットが得られます。

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

では、Objective C でこれを達成するにはどうすればよいでしょうか。

*申し訳ありませんが、3 つの要素では意味が伝わらなかったため、別の要素が必要でした...

4

1 に答える 1

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
于 2012-08-15T17:17:21.110 に答える