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;