Ale*_*x G 4 xcode objective-c ios
我有一个名为putNumberUsed的NSMutableArray.它包含以下对象@"blah1,@"blah2",@"blah3",@"blah4".我想随机对这些对象进行随机播放,例如,如果我选择:
[putNumberUsed objectAtIndex:0]
Run Code Online (Sandbox Code Playgroud)
它会给我任何东西,但"blah1".我该怎么做呢?以下是我目前使用的代码,提前感谢
NSMutableArray *putNumbersUsed= [[NSMutableArray alloc] arrayWithObjects:@"blah1",@"blah2",@"blah3",@"blah4",nil];
Run Code Online (Sandbox Code Playgroud)
小智 9
我想,你可以为此写一个循环.请检查以下代码,
for (int i = 0; i < putNumberUsed.count; i++) {
int randomInt1 = arc4random() % [putNumberUsed count];
int randomInt2 = arc4random() % [putNumberUsed count];
[putNumberUsed exchangeObjectAtIndex:randomInt1 withObjectAtIndex:randomInt2];
}
Run Code Online (Sandbox Code Playgroud)
我这可能对你有用.
来自iOS 10.x ++ 的洗牌阵列新概念由Apple提供,
您需要导入框架:
ObjeC
#import <GameplayKit/GameplayKit.h>
NSArray *shuffledArray = [yourArray shuffledArray];
Run Code Online (Sandbox Code Playgroud)
迅速
import GameplayKit
let shuffledArray = yourArray.shuffled()
Run Code Online (Sandbox Code Playgroud)
这是一个改组解决方案,当count> 1时,所有位置都必须更改。
添加类似NSMutableArray + Shuffle.m的类别:
@implementation NSMutableArray (Shuffle)
// Fisher-Yates shuffle variation with all positions forced to change
- (void)unstableShuffle
{
for (NSInteger i = self.count - 1; i > 0; i--)
// note: we use u_int32_t because `arc4random_uniform` doesn't support int64
[self exchangeObjectAtIndex:i withObjectAtIndex:arc4random_uniform((u_int32_t)i)];
}
@end
Run Code Online (Sandbox Code Playgroud)
然后,您可以像这样洗牌:
[putNumbersUsed unstableShuffle];
Run Code Online (Sandbox Code Playgroud)
此解决方案:
Swift 3.2和Swift 4的等效项是:
extension Array {
mutating func unstableShuffle() {
for i in stride(from: count - 1, to: 0, by: -1) {
swapAt(i, Int(arc4random_uniform(UInt32(i))))
}
}
}
Run Code Online (Sandbox Code Playgroud)
Swift 3.0和3.1的等效项是:
extension Array {
mutating func unstableShuffle() {
for i in stride(from: count - 1, to: 0, by: -1) {
swap(&self[i], &self[Int(arc4random_uniform(UInt32(i)))])
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:还提供了用于常规混排的算法(其中可能具有相同位置的结果)
| 归档时间: |
|
| 查看次数: |
6346 次 |
| 最近记录: |