生成不再生成的随机索引

时间:2013-12-22 17:51:35

标签: objective-c arrays random

我有一系列名称和一组数字

我的Person类具有名称数字的属性。我想将随机值分配给随机的人。

假设我有一个包含字符串 @"mary" , @"Jack" and @"ABhraham"的数组 和另一个带有数字 122, 378, 987的数组,我想随机为它们分配这些值。我使用了arc4random()方法,但它有时会再次返回相同的值。

2 个答案:

答案 0 :(得分:2)

使用Fisher–Yates shuffle。创建一个数字为零到N-1的数组,其中N是数组中元素的数量;这将是索引数组。然后将Fisher-Yates shuffle应用于索引数组。现在,您可以为number[index[i]]使用name[i]

这是link to an answer that provides a Fisher-Yates Shuffle implementation in Objective-C

答案 1 :(得分:1)

1:使用字典,为每个人设置密钥。

2:对两者使用可变数组,在分配时删除每个对象。

while(arrayOfNumberTags.count>0){
    float randomIndex = arc4random() % arrayOfNumberTags.count;
    int tagForPerson = [arrayOfNumberTags objectAtIndex:randomIndex];
    //Create the Person object with the tag and any person
    [arrayOfNumberTags removeObjectAtIndex:randomIndex];

}