Перестройте NSArray/MSMutableArray в случайном порядке

Я использую массив NSArray/NSMutable для хранения разных объектов. Как только все объекты будут добавлены, я хочу перестроить их в произвольном порядке. Как я могу это сделать?

Ответы

Ответ 1

NSUInteger count = [yourMutableArray count];
for (NSUInteger i = 0; i < count; ++i) {
// Select a random element between i and end of array to swap with.
   int nElements = count - i;
   int n = (arc4random() % nElements) + i;
   [yourMutableArray exchangeObjectAtIndex:i withObjectAtIndex:n];
}

Ответ 2

// the Knuth shuffle
for (NSInteger i = array.count-1; i > 0; i--)
{
    [array exchangeObjectAtIndex:i withObjectAtIndex:arc4random_uniform(i+1)];
}

Ответ 3

Ссылка GameplayKit/GameplayKit.h в вашем проекте тогда

#import <GameplayKit/GameplayKit.h>

Теперь вы можете использовать свойство shuffledArray.

NSArray *randomArray = [yourArray shuffledArray];

Ответ 4

Swift 4

let count = self.arrayOfData.count
for (index, _) in self.arrayOfData.enumerated()
{
  let nTempElement = count - index
  let swapIndexwith = (Int(arc4random()) % nTempElement) + index
  arrayOfData.swapAt(index, swapIndexwith)
}