Objective-Cで乱数を生成する

擬似乱数の生成はC言語
全部Static。
JavaみたいにStatic initializerがあれば少しはマシになりそう。
 

出来る事

ランダムな整数を生成。
上限/下限を指定したランダムな整数を生成。
0.0〜1.0のランダムな小数を生成。
長さと使用する文字を指定して、ランダムな文字列を生成。
長さを指定して、ランダムなASCII文字列を生成。
 

使い方

#import "Random.h"

@implementation RootViewController
- (void)loadView {
	NSLog(@"random int: %d", [Random randInt]);
	NSLog(@"randam int(10~15): %d", [Random randIntRange:NSMakeRange(10, 5)]);
	NSLog(@"randam float: %f", [Random randFloat]);
	NSLog(@"randam string: %@", [Random randString:32 withChars:@"あいうえお"]);
	NSLog(@"randam ascii string: %@", [Random randAsciiString:32]);
}
@end

 

実行結果
random int: 1994484546
randam int(10~15): 12
randam float: 0.666567
randam string: おあえいあえういおあああおえううあえいうあえうえいえいういあおあ
randam ascii string: yE1P7YKGvFWp8QpqdAzJjbWjZujPRY0r

 

ソース

Random.h
#import <Foundation/Foundation.h>


@interface Random : NSObject {

}

+ (CGFloat)randFloat;
+ (NSUInteger)randInt;
+ (NSUInteger)randIntRange:(NSRange)range;
+ (NSString *)randString:(NSUInteger)length withChars:(NSString *)chars;
+ (NSString *)randAsciiString:(NSUInteger)length;

@end

 

Random.m
#import "Random.h"


@interface Random(Private)
+ (void)staticInit;
@end


@implementation Random

+ (void)staticInit
{
	static BOOL initFlag = FALSE;
	if (!initFlag) {
		srand(time(NULL));
		initFlag = TRUE;
	}
}

+ (CGFloat)randFloat
{
	[Random staticInit];
	return rand() / (RAND_MAX * 1.0);
}

+ (NSUInteger)randInt
{
	[Random staticInit];
	return rand();
}

+ (NSUInteger)randIntRange:(NSRange)range
{
	return range.location + (NSUInteger)([self randInt] * (range.length + 1.0) / (RAND_MAX + 1.0));
}

+ (NSString *)randString:(NSUInteger)length withChars:(NSString *)chars
{
	NSRange range = NSMakeRange(0, [chars length]-1);
	NSMutableString *str = [NSMutableString stringWithCapacity:length];
	for (int i=0; i<length; i++) {
		[str appendString:[chars substringWithRange:NSMakeRange([Random randIntRange:range], 1)]];
	}
	return str;
}

+ (NSString *)randAsciiString:(NSUInteger)length
{
	static NSString *ascii = nil;
	if (!ascii) {
		ascii = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	}
	return [Random randString:length withChars:ascii];
}

@end

 

参考URL

ランダムな数値(乱数)を取得する方法 - iPhone / iPad / Objective-C のメモ帳 - crane&to.inc. -
http://d.hatena.ne.jp/craneto/20100721/1279677592