Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何随机化NSArray?_Objective C_Sorting_Random_Nsarray - Fatal编程技术网

Objective c 如何随机化NSArray?

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

假设我有一个里面有50-100个物体的NSArray。如何将数组按随机顺序排列?

有很多方法可以做到这一点,但大多数方法只需生成随机数即可。也许您可以使用NSMutableArray使用此技术:

  • 生成0到49之间的随机数(假设50个元素)
  • 交换元素0和生成的任何数字
  • 生成一个介于1和49之间的随机数
  • 交换元素1和生成的任何数字
  • 等等
  • 这可能是最有效的方法

    示例代码(未测试):

    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>