#import <Foundation/Foundation.h>@interfaceDCRandomize : NSObject#pragma mark - public method+(NSMutableArray*)shuffleArray:(NSMutableArray*)array;+(NSMutableArray*)shuffle:(NSInteger)minmax:(NSInteger)max;+(NSInteger)exact:(NSInteger)minmax:(NSInteger)maxexceptId:(NSInteger)exceptId;+(NSInteger)range:(NSInteger)minmax:(NSInteger)max;@end
#import "DCRandomize.h"@implementationDCRandomize#pragma mark - Shuffle Array// 配列をシャッフルして取得+(NSMutableArray*)shuffleArray:(NSMutableArray*)array{NSMutableArray*resultList=array;inti=[resultListcount];while(--i){intj=rand()%(i+1);[resultListexchangeObjectAtIndex:iwithObjectAtIndex:j];}return[NSMutableArrayarrayWithArray:resultList];}#pragma mark - Shuffle// 指定した範囲内の数値をシャッフルして配列取得+(NSMutableArray*)shuffle:(NSInteger)minmax:(NSInteger)max{NSMutableArray*tmpList=[NSMutableArrayarray];intnum=(max-min)+1;for(inti=0;i<num;i++){[tmpListinsertObject:[NSNumbernumberWithInt:i+min]atIndex:i];}return[DCRandomizeshuffleArray:tmpList];}#pragma mark - Exact// 指定した数値と異なる乱数を取得+(NSInteger)exact:(NSInteger)minmax:(NSInteger)maxexceptId:(NSInteger)exceptId{NSIntegertmpId;do{tmpId=[DCRandomizerange:minmax:max];}while(tmpId==exceptId);returntmpId;}#pragma mark - Range// 指定した範囲内の乱数を取得+(NSInteger)range:(NSInteger)minmax:(NSInteger)max{returnmin+arc4random_uniform((max-min)+1);}@end