我有一系列名称和一组数字。
我的Person类具有名称和数字的属性。我想将随机值分配给随机的人。
假设我有一个包含字符串 @"mary" , @"Jack" and @"ABhraham"
的数组
和另一个带有数字 122, 378, 987
的数组,我想随机为它们分配这些值。我使用了arc4random()
方法,但它有时会再次返回相同的值。
答案 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];
}