擬似乱数の生成は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