Objective c 如何随机化NSArray?
假设我有一个里面有50-100个物体的NSArray。如何将数组按随机顺序排列?有很多方法可以做到这一点,但大多数方法只需生成随机数即可。也许您可以使用NSMutableArray使用此技术:Objective c 如何随机化NSArray?,objective-c,sorting,random,nsarray,Objective C,Sorting,Random,Nsarray,假设我有一个里面有50-100个物体的NSArray。如何将数组按随机顺序排列?有很多方法可以做到这一点,但大多数方法只需生成随机数即可。也许您可以使用NSMutableArray使用此技术: 生成0到49之间的随机数(假设50个元素) 交换元素0和生成的任何数字 生成一个介于1和49之间的随机数 交换元素1和生成的任何数字 等等 这可能是最有效的方法 示例代码(未测试): srandom(时间(空)); 对于(NSInteger x=0;x
srandom(时间(空));
对于(NSInteger x=0;x<[数组计数];x++){
NSInteger randInt=(random()%([array count]-x))+x;
[数组交换对象索引:x与对象索引:randInt];
}
另外,您可以使用两个NSMutableArray对象,在第一个对象有对象时简单地循环,随机选择一个,然后将其添加到另一个对象的末尾。但就地方法可能更快。NSArray*test=[NSArray阵列,其对象为:@“AA”、“BC”、“DE”、“EG”、“FA”、“GQ”、“DA]
NSArray *test = [NSArray arrayWithObjects:@"AA",@"BC",@"DE",@"EG",@"FA",@"GQ",@"DA"];<br>
NSSet *testset = [NSSet setWithArray:test];
NSArray *randomorder = [testset allObjects];
NSLog(@"random : %@",randomorder);<br><br>
NSSet*testset=[NSSet setWithArray:test];
NSArray*随机顺序=[testset AllObject];
NSLog(@“随机:%@”,随机顺序)
显然,NSSet没有索引。因此,NSArray对象在转换为NSSet并返回时可能会混淆。这是一个黑客解决方案,但它可以工作(对此不确定)。使用arc4random()更好!这是Fisher-Yates算法的一个版本Yates_shuffleisnt arc4random更慢?我提交这个问题的唯一原因是因为我进行了大量搜索,没有找到重复的线程。谢谢你的链接!如果你把重复的对象放进一个集合会发生什么?你已经知道了。在NSSet中,只保留唯一的项。换句话说,从数组创建集合可能需要考虑重复的元素。
NSArray *test = [NSArray arrayWithObjects:@"AA",@"BC",@"DE",@"EG",@"FA",@"GQ",@"DA"];<br>
NSSet *testset = [NSSet setWithArray:test];
NSArray *randomorder = [testset allObjects];
NSLog(@"random : %@",randomorder);<br><br>