ちょいちょい使うんでメモ。
# 今回はこちらから拝借
http://por.s54.xrea.com/lab/230/
これはActionScript用みたいですが、アルゴリズム的にはなんでも使えるよね。
早いとか遅いとかは分からないですけど…
var rndList:Array = []; rndList = randomList(10); // 整数を重複なしにランダム取得 function randomList(max:Number):Array { var inList:Array = []; var outList:Array = []; var j = 0; var rndValue; for (var i=0; i<max; i++) inList[i] = i; var inListL = inList.length; while (inListL) { rndValue = Math.floor( Math.random() * (max-j) ); outList[j] = inList.splice( rndValue, 1 ); j++; inListL = inList.length; } return outList; };
2010.12.01 追記:
Objective-C の場合。
intのNSArrayが作れなくて焦った。
NSIntegerはオブジェクトじゃないですよ、NSNumberじゃないとダメですよ。
NSMutableArray *rndList = [[NSMutableArray alloc] initWithArray:[self randomList:10]]; - (NSMutableArray*)randomList:(int)max { NSMutableArray *inList = [[NSMutableArray alloc] init]; NSMutableArray *outList = [[NSMutableArray alloc] init]; int j = 0; int randomNumber = 0; for (int i=0; i<max; i++) { NSNumber *nsNum = [NSNumber numberWithInt:i]; [inList insertObject:nsNum atIndex:i]; } // 現在の日時を用いて乱数を初期化する srand([[NSDate date] timeIntervalSinceReferenceDate]); int inListL = [inList count]; while (inListL) { randomNumber = rand() % (max-j); NSNumber *nm_ = [inList objectAtIndex:randomNumber]; [outList addObject:nm_]; [inList removeObjectAtIndex:randomNumber]; j++; inListL = [inList count]; NSLog(@"%d:%d",inListL,[nm_ intValue]); } return outList; }