从 NSArray 获取一个随机对象而不重复 [英] Getting a random object from NSArray without duplication

查看:50
本文介绍了从 NSArray 获取一个随机对象而不重复的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带有 17 个对象的 NSArray,如下所示:

I have an NSArray with 17 objects, something like this:

NSArray *objArray = [[NSArray alloc]initWithObjects: @"1",@"2",@"3",@"4",@"5",@"6"
,@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17", nil];

和一个带有随机数的 int 如下:

and an int with a random number as follows:

int random = arc4random()%17+1;

我想从这个 NSArray 中获取一个随机对象而不是重复的,即使我关闭了应用程序(也许通过使用 NSUserDefaults).

I want to get a random object from this NSArray without it being a duplicate, even if I closed the app (maybe by using NSUserDefaults).

如果我已经获得了所有对象,我想为相同的对象生成一个新的随机序列.

If I've gotten all the objects I want to generate a new random sequence for the same objects.

推荐答案

您可以通过制作数组的可变副本来实现此目的,在从该数组中随机选择后,删除相同的对象.当您想保存数组时,请保存可变数组本身,以便在应用程序重新启动时可以从上次中断的地方继续.这个小测试应用程序就是这样做的,并且只记录随机选择的值:

You could do this by making a mutable copy of the array, and after you make a random selection from that array, remove that same object. When you want to save the array, save the mutable array itself, so can resume where you left off when the app restarts. This little test app does that, and just logs the value of the random pick:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.objArray = @[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17"];
    self.mut = [self.objArray mutableCopy];
}

-(IBAction)pickNumber:(id)sender {
    int index = arc4random_uniform(self.mut.count);
     NSLog(@"%@", self.mut[index]);
    [self.mut removeObjectAtIndex:index];
    if (self.mut.count == 0) {
        self.mut = [self.objArray mutableCopy];
        NSLog(@"*******************");
    }
}

这篇关于从 NSArray 获取一个随机对象而不重复的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆