数组随机排序(随手记)

注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];

        }

    }];

}

posted on 2016-12-27 15:05  M&W  阅读(198)  评论(0编辑  收藏  举报

导航