iPhoneSDK开发136技系列:第21技NSArray随机排序
本系列文章基于日本最近热卖的《PhoneSDK开发136技》一书的目录和实例代码。由于无法获得此书,因此只能猜测加个人发挥。确切地说应该是一个读码笔记系列。
这次我们要做的就是想将一个NSArray中储存的元素乱序排列下。为此我们需要借助NSMutableArray类和rand()函数。其中NSMutableArray是NSArray的一个子类。两者之间的转换也很简单。以可变的数组转成不可变的数组为例,我们可以用如下方法:
- /* 不自动释放 */
- NSArray *array = [[NSArray alloc] initWithArray:mutableArray];
- /* 自动释放 */
- NSArray *array = [NSArray arrayWithArray:mutableArray];
上述两种方法的区别就在是否自动释放。将不可变的数组转成可变数组的方法也类似。了解了这些后我们就可以开始进行乱序操作了,代码如下:
- @interface NSArray (randomized)
- - (NSArray *) randomizedArray;
- @end
- @implementation NSArray (randomized)
- - (NSArray *) randomizedArray {
- NSMutableArray *results = [NSMutableArray arrayWithArray:self];
- int i = [results count];
- while(--i > 0) {
- int j = rand() % (i+1);
- [results exchangeObjectAtIndex:i withObjectAtIndex:j];
- }
- return [NSArray arrayWithArray:results];
- }
- @end
转载于:https://blog.51cto.com/bj007/411327