数组随机排序(随手记)
注1:集合是无序的且不保证随机的
注2:arc4random_uniform(x),可以用来产生0~(x-1)范围内的随机数,不需要再进行取模运算
方法一:
- (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];
}
}];
}