如何在Objective-C中反转NSArray?

如何在Objective-C中反转NSArray?

我需要扭转我的态度NSArray

举个例子:

[1,2,3,4,5] 必须成为: [5,4,3,2,1]

实现这一目标的最佳方法是什么?


慕慕森
浏览 1176回答 3
3回答

MMMHUHU

为了得到阵列的反转副本,看danielpunkass'溶液使用reverseObjectEnumerator。要反转可变数组,可以在代码中添加以下类别:@implementation&nbsp;NSMutableArray&nbsp;(Reverse)-&nbsp;(void)reverse&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;([self&nbsp;count]&nbsp;<=&nbsp;1) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return; &nbsp;&nbsp;&nbsp;&nbsp;NSUInteger&nbsp;i&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;NSUInteger&nbsp;j&nbsp;=&nbsp;[self&nbsp;count]&nbsp;-&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(i&nbsp;<&nbsp;j)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[self&nbsp;exchangeObjectAtIndex:i &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;withObjectAtIndex:j]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j--; &nbsp;&nbsp;&nbsp;&nbsp;}}@end

白猪掌柜的

如果您利用内置reverseObjectEnumerator方法NSArray和以下allObjects方法,有一个更容易的解决方案NSEnumerator:NSArray*&nbsp;reversedArray&nbsp;=&nbsp;[[startArray&nbsp;reverseObjectEnumerator]&nbsp;allObjects];allObjects记录为返回一个数组,其中包含尚未遍历的对象nextObject,按顺序:此数组以枚举顺序包含枚举器的所有剩余对象。

守着一只汪

一些基准1. reverseObjectEnumerator allObjects这是最快的方法:NSArray&nbsp;*anArray&nbsp;=&nbsp;@[@"aa",&nbsp;@"ab",&nbsp;@"ac",&nbsp;@"ad",&nbsp;@"ae",&nbsp;@"af",&nbsp;@"ag", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@"ah",&nbsp;@"ai",&nbsp;@"aj",&nbsp;@"ak",&nbsp;@"al",&nbsp;@"am",&nbsp;@"an",&nbsp;@"ao",&nbsp;@"ap",&nbsp;@"aq",&nbsp;@"ar",&nbsp;@"as",&nbsp;@"at", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@"au",&nbsp;@"av",&nbsp;@"aw",&nbsp;@"ax",&nbsp;@"ay",&nbsp;@"az",&nbsp;@"ba",&nbsp;@"bb",&nbsp;@"bc",&nbsp;@"bd",&nbsp;@"bf",&nbsp;@"bg",&nbsp;@"bh", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@"bi",&nbsp;@"bj",&nbsp;@"bk",&nbsp;@"bl",&nbsp;@"bm",&nbsp;@"bn",&nbsp;@"bo",&nbsp;@"bp",&nbsp;@"bq",&nbsp;@"br",&nbsp;@"bs",&nbsp;@"bt",&nbsp;@"bu", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@"bv",&nbsp;@"bw",&nbsp;@"bx",&nbsp;@"by",&nbsp;@"bz",&nbsp;@"ca",&nbsp;@"cb",&nbsp;@"cc",&nbsp;@"cd",&nbsp;@"ce",&nbsp;@"cf",&nbsp;@"cg",&nbsp;@"ch", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@"ci",&nbsp;@"cj",&nbsp;@"ck",&nbsp;@"cl",&nbsp;@"cm",&nbsp;@"cn",&nbsp;@"co",&nbsp;@"cp",&nbsp;@"cq",&nbsp;@"cr",&nbsp;@"cs",&nbsp;@"ct",&nbsp;@"cu", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@"cv",&nbsp;@"cw",&nbsp;@"cx",&nbsp;@"cy",&nbsp;@"cz"];NSDate&nbsp;*methodStart&nbsp;=&nbsp;[NSDate&nbsp;date];NSArray&nbsp;*reversed&nbsp;=&nbsp;[[anArray&nbsp;reverseObjectEnumerator]&nbsp;allObjects];NSDate&nbsp;*methodFinish&nbsp;=&nbsp;[NSDate&nbsp;date];NSTimeInterval&nbsp;executionTime&nbsp;=&nbsp;[methodFinish&nbsp;timeIntervalSinceDate:methodStart];NSLog(@"executionTime&nbsp;=&nbsp;%f",&nbsp;executionTime);结果:&nbsp;executionTime = 0.0000262.迭代reverseObjectEnumerator这速度在1.5x到2.5x之间:NSDate&nbsp;*methodStart&nbsp;=&nbsp;[NSDate&nbsp;date];NSMutableArray&nbsp;*array&nbsp;=&nbsp;[NSMutableArray&nbsp;arrayWithCapacity:[anArray&nbsp;count]];NSEnumerator&nbsp;*enumerator&nbsp;=&nbsp;[anArray&nbsp;reverseObjectEnumerator];for&nbsp;(id&nbsp;element&nbsp;in&nbsp;enumerator)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;[array&nbsp;addObject:element];}NSDate&nbsp;*methodFinish&nbsp;=&nbsp;[NSDate&nbsp;date];NSTimeInterval&nbsp;executionTime&nbsp;=&nbsp;[methodFinish&nbsp;timeIntervalSinceDate:methodStart];NSLog(@"executionTime&nbsp;=&nbsp;%f",&nbsp;executionTime);结果:&nbsp;executionTime = 0.0000713. sortedArrayUsingComparator速度在30x到40x之间(这里没有惊喜):NSDate&nbsp;*methodStart&nbsp;=&nbsp;[NSDate&nbsp;date];NSArray&nbsp;*reversed&nbsp;=&nbsp;[anArray&nbsp;sortedArrayUsingComparator:&nbsp;^(id&nbsp;obj1,&nbsp;id&nbsp;obj2)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[anArray&nbsp;indexOfObject:obj1]&nbsp;<&nbsp;[anArray&nbsp;indexOfObject:obj2]&nbsp;?&nbsp;NSOrderedDescending&nbsp;:&nbsp;NSOrderedAscending;}];NSDate&nbsp;*methodFinish&nbsp;=&nbsp;[NSDate&nbsp;date];NSTimeInterval&nbsp;executionTime&nbsp;=&nbsp;[methodFinish&nbsp;timeIntervalSinceDate:methodStart];NSLog(@"executionTime&nbsp;=&nbsp;%f",&nbsp;executionTime);结果:&nbsp;executionTime = 0.001100[[anArray reverseObjectEnumerator] allObjects]在速度和轻松方面,明显的赢家也是如此。
打开App,查看更多内容
随时随地看视频慕课网APP