iphone:如何随机移动数组的元素

时间:2012-05-12 06:25:02

标签: iphone objective-c ios5

  

可能重复:
  canonical way to randomize an NSArray in Objective C

假设我有一个如下数组。

shuffleArray = [[NSMutableArray alloc] initWithObjects:@"A",@"B",@"C",@"D",@"E", nil];

我希望随机更改数组元素的位置,如下所示:

 shuffleArray = [[NSMutableArray alloc] initWithObjects:@"C",@"A",@"B",@"E",@"D", nil];

然后我该怎么办呢。

任何想法?

提前预订..

2 个答案:

答案 0 :(得分:0)

-(NSArray *)shuffleme
{

 NSMutableArray *array = [NSMutableArray arrayWithCapacity:[self count]];

 NSMutableArray *array1 = [self mutableCopy];
 while ([array1 count] > 0)
 {
  int temp = arc4random() % [array1 count];
  id objectToMove = [array1 objectAtIndex:temp];
  [array addObject:objectToMove];
  [array1 removeObjectAtIndex:temp];
 }

   [array1 release];
   return array;
}

希望,这会对你有帮助..

答案 1 :(得分:0)

-(void)changeObjectAtIndex:(int)index1 index2:(int)index2 array:(NSMutableArray *)array
{
     id objectAtIndex1=[array objectAtIndex:index1];
     [array insertObject:[array objectAtIndex:index2] atIndex:index1];
     [array insertObject:id atIndex:index2];
}

这是为了交换两个索引处的对象,如果你确切知道你想要特定对象的位置,你就可以使这个函数递归。但是如果你想要它随机,那么你可以采用Nit的方法。

随机也可以通过以下方式完成: -

id newObject= [[[yourArray objectAtIndex:index] retain] autorelease];
[yourArray  removeObjectAtIndex:index];
[yourArray  insertObject:object atIndex:yourIndex];

请记住保留对象。