数组随机排序(随手记)
注1:集合是無序的且不保證隨機的
注2:arc4random_uniform(x),可以用來產(chǎn)生0~(x-1)范圍內(nèi)的隨機數(shù),不需要再進行取模運算
?
方法一:
- (NSMutableArray *)randomArrayFrom:(NSArray*)oldArray
{
? ? NSMutableArray *newArray = [NSMutableArray array];
? ? while (newArray.count != oldArray.count)
? ? {
? ? ? ? NSInteger randomNum = arc4random()%oldArray.count;
? ? ? ? id obj = oldArray[randomNum];
? ? ? ? if (![newArray containsObject:obj])
? ? ? ? {
? ? ? ? ? ? [newArray addObject:obj];
? ? ? ? }
? ? }
? ? return newArray;
}
方法二:
- (NSMutableArray *)randomArrayFrom:(NSArray*)oldArray
{
? ? NSMutableArray *newArray = [NSMutableArray array];
? ? NSMutableArray *tempArray = [NSMutableArray arrayWithArray:oldArray];
?? ?
? ? for (NSInteger i=0; i<oldArray.count; i++)
? ? {
? ? ? ? NSInteger randomNum = arc4random()%tempArray.count;
? ? ? ? id obj = tempArray[randomNum];
? ? ? ? [newArray addObject:obj];
? ? ? ? [tempArray removeObject:obj];
? ? }
? ? return newArray;
}
方法三(官方方法,推薦使用):
//NSMutableArray
- (void)sortUsingComparator:(NSComparator NS_NOESCAPE)cmptr NS_AVAILABLE(10_6, 4_0);
//NSArray
- (NSArray<ObjectType> *)sortedArrayUsingComparator:(NSComparator NS_NOESCAPE)cmptr NS_AVAILABLE(10_6, 4_0);
- (NSArray *)randomArrayFrom:(NSArray*)oldArray
{
? ? return [oldArray sortedArrayUsingComparator:^NSComparisonResult(id? _Nonnull obj1, id? _Nonnull obj2) {
? ? ? ? int seed = arc4random_uniform(2);
? ? ? ? if (seed)
? ? ? ? {
? ? ? ? ? ? return [obj1 compare:obj2];
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? return [obj2 compare:obj1];
? ? ? ? }
? ? }];
}
轉載于:https://www.cnblogs.com/zhaobobo/p/6225964.html
總結
以上是生活随笔為你收集整理的数组随机排序(随手记)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你可能不知道的Spring Boot那点
- 下一篇: WannaCry病毒横行Windows,