iOS – 如何select数组中的对象更多,然后其他人
我有一个包含各种string的数组。 我想select索引3,7和9中的对象,然后所有其他对象..我可以实现这一点。 (比方说,每次抓取数组中的对象时,我都希望有80%的机会select索引为3,7或9的对象)
这是我的数组:
NSMutableArray* animalImagesArray = [[NSMutableArray alloc] initWithObjects:@"bull.png",@"bunny.png",@"chicken.png",@"cow.png",@"crocodile.png",@"dog.png",@"donkey.png",@"duck.png",@"elephant.png",@"giraffe.png",@"goat.png",@"hippo.png",@"horse.png",@"lion.png",@"monkey.png",@"parrot.png",@"pig.png",@"rooster.png",@"sheep.png",@"snake.png",@"tiger.png",@"warthog.png",@"zebra.png", nil];
任何帮助将不胜感激。 提前致谢!
我喜欢Lyndsey Scott的回答,所以我想实现它,这样你仍然可以得到这个词的原始索引。
如果你有10个物品的arrays,并且你希望其中3个(相等的组合)有80%的机会被select,那么这意味着其他7个有20%的机会。
所以…
我这样做了…
我们知道7是20%。 所以100%是35. 35的80%是28。
理想情况下,你应该在应用程序中,而不是在纸上做这个计算:)也许将每个项目的个别权重存储在一个数组或其他东西。 这样,你可以创build加权arraysdynamic的任何数量的项目和不同的重量等…
你需要其他3个(总共)中的28个,其中两个中的9个和另外10个中的另外的9个。 (为了方便起见,让我们分别为9)。
所以你可以这样做…
NSMutableArray *weightedArray = [NSMutableArray array]; for (int i=0 ; i<originalArray.count ; ++i) { if (i == 3 || i == 7 || i == 9) { for (int count=0 ; count<9 ; ++count) { [weightedArray addObject:array[i]]; } } else { [weightedArray addObject:array[i]]; } } // Now you can select from the weighted array. id randomObject = weightedArray[arc4random_uniform(weightedArray.count)]; //Index of object NSUInteger origIndex = [originalArray indexOfObject:randomObject];
这可能是一个想法,存储个人的权重或什么,然后计算你需要在运行时放置的数量。
正如桑迪·查普曼在评论中指出的,你也可以为原始数组创build一个加权的索引数组,这样你就可以…
[0, 1, 2, 3, 3, 3, ..., 4, 5, 6, 7, 7, 7..., 8, 9, 9, 9, 9, ..., 10]
这样你可以得到索引,而不必得到原来的项目。
无论哪种方式将工作。
如何从1-5的初步随机variables。 如果select[1,4]中的数字,则从集合{3,7,9}中随机select一个索引。 否则,从数组的其余部分随机select一个对象。
(另外,由于数组中的每个对象都有后缀.png,所以不妨将其删除,稍后使用stringWithFormat
将其连接起来)