目前我正在开发一个 iOS 应用程序,我需要从卡片组中随机抽取卡片。目前我的代码如下所示:
- (PlayingCard*) drawRandomCard
{
PlayingCard * randomCard = nil;
NSUInteger index = arc4random_uniform(self.cards.count);
randomCard = self.cards[index]; //self.cards is an NSArray of PlayingCard's
while (randomCard.isUsed) {
index = arc4random_uniform(self.cards.count);
randomCard = self.cards[index];
}
randomCard.used = YES;
return randomCard;
}
这种方法被调用了很多(50'000 - 1'000'000 次蒙特卡罗模拟)!
目前整个事情都变慢了,我真的需要优化它。我有一些想法:
- 更快的随机数生成器
- 将牌组(Objective-C 类,包括 NSArray of PlayingCards)和卡片(Objective-C 类)的整个高级表示更改为普通 C 数组和结构中的表示
- 将甲板和卡片的整个表示更改为按位级别并在那里做所有事情
你怎么看?
你还有其他建议吗?
您知道更适合(更快)的随机数生成器吗?
提前致谢!