2013-03-13 77 views
-5

我有一个数组,我想随机将数组中的项目放入两个具有相同大小的列表中,我正在考虑将项目放入两个数组中,但不确定是否这样是最好的主意。除了将它放入数组中,我该如何编写stament或while循环来从数组中获取所有对象,并将其放入两个数组或列表中。我如何随机地将一个列表分为两个列表

编辑

我想有两个列表划分主列表。随着减半在一个列表中的项目,并在其他列表中的其他减半,我想选择是随机的

+0

嘿检查你的原始数组中的偶数个元素的答案。我为你编码并根据你的问题检查了它的woking。 – 2013-03-13 13:22:36

+0

嘿检查答案现在完成一个。 – 2013-03-13 14:05:56

回答

2
NSMutableArray *temp = [[NSMutableArray alloc] initWithArray:originalArray copyItems:TRUE]; 

NSMutableArray *list1 = [[NSMutableArray alloc] init]; 
NSMutableArray *list2 = [[NSMutableArray alloc] init]; 
while(temp.count > 0){ 

    int index1 = arc4random_uniform(temp.count); 
    [list1 addObject:[temp objectAtIndex:index1]]; 
    [temp removeObjectAtIndex:index1]; 

    if(temp.count != 0){ 
     int index2 = arc4random_uniform(temp.count); 
     [list2 addObject:[temp objectAtIndex:index2]]; 
     [temp removeObjectAtIndex:index2]; 
    } 
} 

现在你将留下2门阵列(列表1和列表2),与内容分开随机在2个阵列

希望我正确地解释你的问题,havnt测试的代码在所有的,应在理论工作

+0

为什么2个指针temp1,temp2?都指向相同的原始数组。 – 2013-03-13 12:51:09

+0

对,那些临时表是原始数组的副本 – Fonix 2013-03-13 12:54:18

+0

很好的答案。我不够清楚。有关更多信息,请参阅更新的答案 – user1898829 2013-03-13 13:32:17

1

假设你原来的阵列有偶数个Elemnets的:

NSMutableArray *list1 = [[NSMutableArray alloc] init]; 
NSMutableArray *list2 = [[NSMutableArray alloc] init]; 
NSMutableArray *originalArray = [[NSMutableArray alloc] initWithObjects:@"ssjsf1",@"ssjsf2",@"ssj3sf",@"ssj4sf",@"ss5jsf",@"ssj6sf",@"ssj7sf",@"ssj8sf",@"ssj9sf",@"s10sjsf",@"ss11jsf",@"ss12jsf",@"ss12jsf",@"ss12jsf",nil]; 
NSMutableArray *temp = [[NSMutableArray alloc] init]; 
int i =0; 
for (i = 0; [temp count] < [originalArray count] ; i++){ 
    int r = arc4random_uniform([originalArray count]); 
    if(!([temp containsObject:[NSNumber numberWithInt:r]])) 
    { 
     [temp addObject:[NSNumber numberWithInt:r]]; 
     [list1 addObject:[originalArray objectAtIndex:r]]; 
     if([originalArray count] % 2 == 0) 
     { 
      if([list1 count] > ([originalArray count]/2)) 
      { 
       [list1 removeObjectAtIndex:r]; 
       [temp removeObject:[NSNumber numberWithInt:r]]; 
      } 
     } 
     if([originalArray count] % 2 != 0) 
      if([list1 count] > ([originalArray count]/2 + 1)) 
      { 
       [list1 removeObjectAtIndex:r]; 
       [temp removeObject:[NSNumber numberWithInt:r]]; 
      } 
    } 
    r = arc4random_uniform([originalArray count]); 
    if(!([temp containsObject:[NSNumber numberWithInt:r]])) 
    { 
     [temp addObject:[NSNumber numberWithInt:r]]; 
     [list2 addObject:[originalArray objectAtIndex:r]]; 

     if([originalArray count] % 2 == 0) 
     { 
      if([list2 count] > ([originalArray count]/2)) 
      { 
       [list1 removeObjectAtIndex:r]; 
       [temp removeObject:[NSNumber numberWithInt:r]]; 
      } 
     } 
     if([originalArray count] % 2 != 0) 
      if([list2 count] > ([originalArray count]/2)) 
      { 
       [list2 removeObjectAtIndex:r]; 
       [temp removeObject:[NSNumber numberWithInt:r]]; 
      } 
    } 
} 


NSLog(@"List1 -- %@ \n List 2 --- %@",list1, list2); 

愿这能帮助你。

+0

这正是我想要的,但我需要它也采取奇数,其中一个列表中有一个项目比另一个更多。 – user1898829 2013-03-13 13:34:54

+0

嘿编辑了奇数的答案也。我已经检查了它现在的工作。 – 2013-03-13 14:05:20