objective-c - 从 NSArray 中获取一个随机对象而不重复

标签 objective-c cocoa random duplicates nsarray

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

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

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

int random = arc4random()%17+1;

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

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

最佳答案

您可以通过制作数组的可变副本来完成此操作,然后从该数组中随机选择后,删除相同的对象。当你想保存数组时,保存可变数组本身,这样当应用程序重新启动时可以从你离开的地方恢复。这个小测试应用程序就是这样做的,并且只记录随机选择的值:

- (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(@"*******************");
    }
}

关于objective-c - 从 NSArray 中获取一个随机对象而不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16791343/

相关文章:

objective-c - 在 switch 语句中达到默认值后 EXC BAD ACCESS

objective-c - NSButtonCell 操作的问题

objective-c - 我可以将下面的轮胎数组设置为 NSArray 吗?

c - 尝试用 C 编写一个洗牌的函数

mysql 为 rand 设置种子

objective-c - 在 iOS 中更改 ViewControllers 和传递数据

ios - 一个 NSURLSession 中所有 NSURLSessionTasks 的平均进度

cocoa - 如何在 NSButton 上绘制右上角圆角?

javascript - 使用 Phaser 在世界中随机放置平台

ios - 在方向更改时重新加载 UIPageViewController View