「ねえ、みんな、私のために素晴らしいランダム化方法を思い付くことができますか?」と投稿したくありませんでした。だから私はトランプのデッキをシャッフルしたり、真にランダムな順列を作成したりするためのアルゴリズムを一日中研究してきましたが、それは非常に困難でした。最後に、以下に示す、より単純なアプローチに落ち着きました。もちろん、私は高品質のゲームを作りたいと思っていますが、オンラインカジノなどでこのアルゴリズムを使用するつもりはありません。それはただのiOSゲームです。それで、これはランダム/メモリ効率が十分ですか?それとも、これにさらに多くの時間と労力を与える必要がありますか?TIA
余談ですが、「TIA」と書くときは、「よろしくお願いします」ではなく、「これはアフリカです」と思います。
@implementation NSMutableArray (Shuffle)
-(void)shuffle
{
for (int i = [self count] - 1; i > 0; i--) {
[self exchangeObjectAtIndex:(arc4random() % ([self count] - 1))
withObjectAtIndex:i];
}
}
@end
編集:
Ok。何か馬鹿げたものを投稿しないように、いくつかのテストコードを実行したかった。:) AdamとNielsbotに応えて、あなたはもっとこのようなものを勧めていますか?
-(void)shuffle
{
for (int i = [self count] - 1; i > 0; i--) {
[self exchangeObjectAtIndex:(arc4random_uniform([self count] - 1))
withObjectAtIndex:i];
}
}
そうですか?
そのように繰り返すことには何かメリットがありますか?
-(void)shuffle
{
for (int i = [self count] - 1; i > 0; i--) {
[self exchangeObjectAtIndex:(arc4random_uniform([self count] - 1))
withObjectAtIndex:i];
}
for (int i = [self count] - 1; i > 0; i--) {
[self exchangeObjectAtIndex:(arc4random_uniform([self count] - 1))
withObjectAtIndex:i];
}
}