Iphone 洗牌数组重复一个值
在这里,我使用了以下代码来洗牌NSMuttable数组,而洗牌数组只会重复一个值,其余所有值都正常工作,我应该对洗牌做什么更改而不重复Iphone 洗牌数组重复一个值,iphone,ios6,nsmutablearray,Iphone,Ios6,Nsmutablearray,在这里,我使用了以下代码来洗牌NSMuttable数组,而洗牌数组只会重复一个值,其余所有值都正常工作,我应该对洗牌做什么更改而不重复 words = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3",@"4", nil] ; NSUInteger count = [words count]; for (int i = 0; i < count; i++) { NSInteger nElements = cou
words = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3",@"4", nil] ;
NSUInteger count = [words count];
for (int i = 0; i < count; i++)
{
NSInteger nElements = count - i;
NSInteger n = (arc4random() % nElements) + i;
NSLog(@"n val %d i val %d",i,n);
[words exchangeObjectAtIndex:i withObjectAtIndex:n];
}
请帮助我解决问题,从您的
NSMutableArray
中删除重复项
// Removing duplicate entry from array
NSArray *copy = [words copy];
NSInteger index = [copy count] - 1;
for (id object in [copy reverseObjectEnumerator])
{
if ([words indexOfObject:object inRange:NSMakeRange(0, index)] != NSNotFound)
{
[words removeObjectAtIndex:index];
}
index--;
}
[copy release];
您可以在每次添加对象时检查它。要从
NSMutableArray
中删除重复项
// Removing duplicate entry from array
NSArray *copy = [words copy];
NSInteger index = [copy count] - 1;
for (id object in [copy reverseObjectEnumerator])
{
if ([words indexOfObject:object inRange:NSMakeRange(0, index)] != NSNotFound)
{
[words removeObjectAtIndex:index];
}
index--;
}
[copy release];
您可以在每次添加对象时检查它。此代码可能会帮助您 洗牌数组只包含0到总_数(数组大小)之间的每个数字一次 您可以从中洗牌现有阵列
@synthesize alreadyGeneratedNumbers;//this is a mutableArray.
int TOTAL_NUMBER=5;//size of array
-(int)generateRandomNumber{
int low_bound = 0;
int high_bound = TOTAL_NUMBER;
int width = high_bound - low_bound;
int randomNumber = low_bound + arc4random() % width;
return randomNumber;
}
-(IBAction)randomNumbers:(UIButton *)sender
{
NSMutableArray *startArray=[NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil];
NSMutableArray *shuffle = [NSMutableArray new];
BOOL contains=YES;
while ([shuffle count]<5) {
NSNumber *generatedNumber=[NSNumber numberWithInt:[self generateRandomNumber]];
//NSLog(@"->%@",generatedNumber);
if (![alreadyGeneratedNumbers containsObject:generatedNumber]) {
[shuffle addObject:generatedNumber];
contains=NO;
[alreadyGeneratedNumbers addObject:generatedNumber];
}
}
if ([alreadyGeneratedNumbers count] >= TOTAL_NUMBER) {
NSLog(@"\nOne shuffel ended.....what to reshuffle");
[alreadyGeneratedNumbers removeAllObjects];
}
NSMutableArray *shuffledArray=[NSMutableArray new];
for (NSNumber *index in shuffle) {
[shuffledArray addObject:[startArray objectAtIndex:[index integerValue]]];
}
NSLog(@"Shuffled array = %@",shuffledArray);
}
@synthesis-alreadygeneratednumber//这是一个可变数组。
整数总数=5//数组大小
-(int)GeneratorDomainNumber{
int低_界=0;
int high_bound=总数量;
int width=高_界-低_界;
int randomNumber=下限+arc4random()%宽度;
返回随机数;
}
-(iAction)随机数:(UIButton*)发送方
{
NSMUTABLEARRY*startArray=[NSMUTABLEARRY数组,其对象为:@“1”、“2”、“3”、“4”、“5”、“零];
NSMUTABLEARRY*shuffle=[NSMUTABLEARRY new];
布尔包含=是;
while([shuffle count]=总数){
NSLog(@“\nOne shuffel end.....................什么要改组”);
[AlreadyGeneratedNumber删除所有对象];
}
NSMutableArray*ShuffleArray=[NSMutableArray新建];
for(随机排列中的NSNumber*索引){
[ShuffleArray addObject:[startArray objectAtIndex:[index integerValue]];
}
NSLog(@“无序数组=%@”,无序数组);
}
此代码可能会帮助您
洗牌数组只包含0到总_数(数组大小)之间的每个数字一次
您可以从中洗牌现有阵列
@synthesize alreadyGeneratedNumbers;//this is a mutableArray.
int TOTAL_NUMBER=5;//size of array
-(int)generateRandomNumber{
int low_bound = 0;
int high_bound = TOTAL_NUMBER;
int width = high_bound - low_bound;
int randomNumber = low_bound + arc4random() % width;
return randomNumber;
}
-(IBAction)randomNumbers:(UIButton *)sender
{
NSMutableArray *startArray=[NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil];
NSMutableArray *shuffle = [NSMutableArray new];
BOOL contains=YES;
while ([shuffle count]<5) {
NSNumber *generatedNumber=[NSNumber numberWithInt:[self generateRandomNumber]];
//NSLog(@"->%@",generatedNumber);
if (![alreadyGeneratedNumbers containsObject:generatedNumber]) {
[shuffle addObject:generatedNumber];
contains=NO;
[alreadyGeneratedNumbers addObject:generatedNumber];
}
}
if ([alreadyGeneratedNumbers count] >= TOTAL_NUMBER) {
NSLog(@"\nOne shuffel ended.....what to reshuffle");
[alreadyGeneratedNumbers removeAllObjects];
}
NSMutableArray *shuffledArray=[NSMutableArray new];
for (NSNumber *index in shuffle) {
[shuffledArray addObject:[startArray objectAtIndex:[index integerValue]]];
}
NSLog(@"Shuffled array = %@",shuffledArray);
}
@synthesis-alreadygeneratednumber//这是一个可变数组。
整数总数=5//数组大小
-(int)GeneratorDomainNumber{
int低_界=0;
int high_bound=总数量;
int width=高_界-低_界;
int randomNumber=下限+arc4random()%宽度;
返回随机数;
}
-(iAction)随机数:(UIButton*)发送方
{
NSMUTABLEARRY*startArray=[NSMUTABLEARRY数组,其对象为:@“1”、“2”、“3”、“4”、“5”、“零];
NSMUTABLEARRY*shuffle=[NSMUTABLEARRY new];
布尔包含=是;
while([shuffle count]=总数){
NSLog(@“\nOne shuffel end.....................什么要改组”);
[AlreadyGeneratedNumber删除所有对象];
}
NSMutableArray*ShuffleArray=[NSMutableArray新建];
for(随机排列中的NSNumber*索引){
[ShuffleArray addObject:[startArray objectAtIndex:[index integerValue]];
}
NSLog(@“无序数组=%@”,无序数组);
}
您想要什么?每个值只有一次?@anopvaidya是的,我希望每个值都在once@Dev_iOS请注意,复制的不是数组中的值,而是随机数。不要期望随机数不会重复,重复是随机性的一部分。Pi的十进制表示包含“代码>3141592653”/代码>中间的某处…@ H2CO3是的,你是对的。所以我认为每次在获取随机数(在for循环中)时,他必须检查数组中是否存在值。因为我已经编辑了我的答案。@Goti,我不确定你的意思,但是对于洗牌数组,这个算法看起来不错。你想要什么?每个值只有一次?@anopvaidya是的,我希望每个值都在once@Dev_iOS请注意,复制的不是数组中的值,而是随机数。不要期望随机数不会重复,重复是随机性的一部分。Pi的十进制表示包含“代码>3141592653”/代码>中间的某处…@ H2CO3是的,你是对的。所以我认为每次在获取随机数(在for循环中)时,他必须检查数组中是否存在值。因为我已经编辑了我的答案。@Goti,我不确定你的意思,但是对于洗牌数组,这个算法似乎很好。initWithObjects:@“1”,“2”,“3”,“4”,nil
似乎不会创建任何重复项。@Goti,但它不是shufling,its显示相同的`array value 1 array value 2 array value 3 array value 4`initWithObjects:@“1”、@“2”、@“3”、@“4”,nil
似乎没有创建任何重复项。@Goti但它没有shuflling,its显示相同的`array value 1 array value 2 array value 3 array value 4`初始无。但一旦生成一个随机变量,它就会被推到上面。对于生成的下一个随机数,它检查该数组,如果它存在,则查找另一个rnd数。就是这样。错误由于未捕获的异常“NSRangeException”而终止应用程序,原因:“***-[\uu NSArrayM objectAtIndex:]:索引4超出边界[0..3]”
是的,我在([shuffle count]时更改为,您是否也将总数更改为4?它正在工作,但它到达了最后的元素“4”它没有正确显示初始无。但一旦生成一个随机数,它就会被推送到该随机数上。对于生成的下一个随机数,它会检查该数组中是否存在,然后找到另一个rnd号。就是这样。错误由于未捕获的异常“NSRangeException”终止应用程序,原因:'***-[\u NSArrayM objectAtIndex:]:索引4超出边界[0..3]'
是的,我在([shuffle count]时更改为,您是否也将总数更改为4?它工作正常,但它到达了最后一个元素“4”,它没有正确显示