什么是最好的方式来洗牌一个NSMutableArray?

什么是最好的方式来洗牌一个NSMutableArray?

如果你有NSMutableArray如何随机调整元素?

(我有我自己的答案,这是在下面,但我是新的可可,我有兴趣知道是否有更好的方法。)


更新:截至iOS 10+和MacOS 10.12+,有一个-[NSMutableArray shuffledArray]方法,可用于洗牌。看见https:/developer.apple.com/Document/Foundation/nsArray/1640855-Shuffledarray?language=objc关于细节。(但请注意,这将创建一个新的数组,而不是对现有的元素进行洗牌。)


心有法竹
浏览 512回答 3
3回答

潇潇雨雨

我通过向NSMutableArray添加一个类别来解决这个问题。编辑:删除不必要的方法,感谢Ladd的回答。编辑:变化(arc4random() % nElements)到arc4random_uniform(nElements)感谢Gregory Goltsov的答复,Miho和Blahdiblah的评论编辑:循环改进,感谢罗恩的评论编辑:添加检查该数组不为空,这要感谢Mahesh Agrawal的评论。//&nbsp;&nbsp;NSMutableArray_Shuffling.h#if&nbsp;TARGET_OS_IPHONE#import&nbsp;<UIKit/UIKit.h>#else#include&nbsp;<Cocoa/Cocoa.h>#endif //&nbsp;This&nbsp;category&nbsp;enhances&nbsp;NSMutableArray&nbsp;by&nbsp;providing //&nbsp;methods&nbsp;to&nbsp;randomly&nbsp;shuffle&nbsp;the&nbsp;elements.@interface&nbsp;NSMutableArray&nbsp;(Shuffling)-&nbsp;(void)shuffle;@end //&nbsp;&nbsp;NSMutableArray_Shuffling.m#import&nbsp;"NSMutableArray_Shuffling.h"@implementation&nbsp;NSMutableArray&nbsp;(Shuffling)-&nbsp;(void)shuffle{ &nbsp;&nbsp;&nbsp;&nbsp;NSUInteger&nbsp;count&nbsp;=&nbsp;[self&nbsp;count]; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(count&nbsp;<=&nbsp;1)&nbsp;return; &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(NSUInteger&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;count&nbsp;-&nbsp;1;&nbsp;++i)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSInteger&nbsp;remainingCount&nbsp;=&nbsp;count&nbsp;-&nbsp;i; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSInteger&nbsp;exchangeIndex&nbsp;=&nbsp;i&nbsp;+&nbsp;arc4random_uniform((u_int32_t&nbsp;)remainingCount); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[self&nbsp;exchangeObjectAtIndex:i&nbsp;withObjectAtIndex:exchangeIndex]; &nbsp;&nbsp;&nbsp;&nbsp;}}@end
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS