iPhoneSDK开发136技系列:第21技NSArray随机排序

      本系列文章基于日本最近热卖的《PhoneSDK开发136技》一书的目录和实例代码。由于无法获得此书,因此只能猜测加个人发挥。确切地说应该是一个读码笔记系列。

      这次我们要做的就是想将一个NSArray中储存的元素乱序排列下。为此我们需要借助NSMutableArray类和rand()函数。其中NSMutableArray是NSArray的一个子类。两者之间的转换也很简单。以可变的数组转成不可变的数组为例,我们可以用如下方法:

 
  
  1. /* 不自动释放 */ 
  2. NSArray *array = [[NSArray alloc] initWithArray:mutableArray];  
  3. /* 自动释放 */ 
  4. NSArray *array = [NSArray arrayWithArray:mutableArray]; 

     上述两种方法的区别就在是否自动释放。将不可变的数组转成可变数组的方法也类似。了解了这些后我们就可以开始进行乱序操作了,代码如下:

 
  
  1. @interface NSArray (randomized)  
  2. - (NSArray *) randomizedArray;  
  3. @end  
  4.  
  5. @implementation NSArray (randomized)  
  6. - (NSArray *) randomizedArray {  
  7.     NSMutableArray *results = [NSMutableArray arrayWithArray:self];  
  8.  
  9.     int i = [results count];  
  10.     while(--i > 0) {  
  11.         int j = rand() % (i+1);  
  12.         [results exchangeObjectAtIndex:i withObjectAtIndex:j];  
  13.     }  
  14.  
  15.     return [NSArray arrayWithArray:results];  
  16. }  
  17. @end