Objective c 不同字符串数组中的随机颜色
我想为不同的字符串选择随机数。以下示例与我的场景类似:Objective c 不同字符串数组中的随机颜色,objective-c,random,uikit,uicolor,arc4random,Objective C,Random,Uikit,Uicolor,Arc4random,我想为不同的字符串选择随机数。以下示例与我的场景类似: + (UIColor *)ivl_randomColorWithSeedString:(NSString *)seedString { srand48(seedString ? seedString.hash : arc4random()); float red = 0.0; while (red < 0.1 || red > 0.84) { red = drand48();
+ (UIColor *)ivl_randomColorWithSeedString:(NSString *)seedString {
srand48(seedString ? seedString.hash : arc4random());
float red = 0.0;
while (red < 0.1 || red > 0.84) {
red = drand48();
}
float green = 0.0;
while (green < 0.1 || green > 0.84) {
green = drand48();
}
float blue = 0.0;
while (blue < 0.1 || blue > 0.84) {
blue = drand48();
}
return [UIColor colorWithRed:red green:green blue:blue alpha:1.0f];
}
这方面的最佳方法是什么?使用
arc4random
无法实现这一点。您需要使用random number generator的种子版本random
,并使用字符串中的值进行种子设定,该值对于不同的字符串值是唯一的
这种生成的结果与您想要的完全一样-对于相同的种子,每次生成的序列都将完全相同。
对于不同的种子值,随机序列将不同
例如,您可以将字符串的长度作为种子,但为了使其更易变,您可以计算以int值表示的字符总数,或者使用hash
函数
因此,在您的方法中,您应该在开始时调用srandom(seed)
,并使用random
而不是arc4random
和srand48
我还为这些场景编写了一个库,在这里很有用:
要获得随机颜色,只需使用:
+ (void) setSeed:(unsigned)seed;
+ (UIColor*) randomColorUseSeed:(BOOL)useSeed
如果您希望在数组中有颜色并只获取其中一个索引,则解决方案相同:
+ (void) setSeed:(unsigned)seed;
+ (id) randomElementFromArray:(NSArray*) array useSeed:(BOOL) useSeed;
作为
setSeed的参数
传递根据上述字符串生成的值。您能给出一个您期望的输入和输出示例吗?
+ (void) setSeed:(unsigned)seed;
+ (id) randomElementFromArray:(NSArray*) array useSeed:(BOOL) useSeed;