使用xcode,如何从我的plist中随机选择?我在我的plist中创建了84个问题,并且想要在用户单击按钮时随机选择10来创建测验。
到目前为止我已经
了NSString *plistFile = [[NSBundle mainBundle] pathForResource:@"global" ofType:@"plist"];
NSDictionary *dict = [NSDictionary dictionaryWithContentsofFile:plistFile];
NSLog(@"%@",[dict objectForKey:@"1"]);
NSLog(@"%@",[dict objectForKey:@"2"]);
NSLog(@"%@",[dict objectForKey:@"3"]);
Global是plist名称,@“1”,@“2”等是每个不同问题的名称。这是我用随机问题创建测验的漫长道路。
答案 0 :(得分:0)
如果您的密钥确实是@"1"
,@"2"
等,那么您只需选择一个随机数并选择该对象即可。例如,
int i = (arc4random() % 84) + 1;
[dict objectForKey:[NSString stringWithFormat:@"%d",i]];
但是,在这种情况下,在我看来,您应该使用NSArray
个问题而不是NSDictionary
。然后你可以简单地做
int i = arc4random() % 84;
[questionArray objectAtIndex:i];
要从10
种可能性中选择84
个不同的随机数,最简单的可能就是保留NSMutableArray
个数字。然后,如上所述生成另一个随机数,然后在将其添加到数组之前,检查它是否已经存在。例如:
NSMutableArray *questionNumbers = [[NSMutableArray alloc] init];
int i;
while ([questionNumbers count] < 10) {
i = arc4random() % 84;
if (![questionNumbers containsObject:[NSNumber numberWithInt:i]]) {
[questionNumbers addObject:[NSNumber numberWithInt:i]];
}
}
如果您选择这种方法,请不要忘记在某些时候发布questionNumbers
。
答案 1 :(得分:0)
您检查了this。然后,您需要拥有自己的算法,以保持其唯一的10个数字。
答案 2 :(得分:0)
您可以使用其他问题的解决方案来实现此目的:
What's the Best Way to Shuffle an NSMutableArray?
使用该解决方案中的-shuffle
方法,您可以执行以下操作:
- (NSArray *)getRandomObjectsFromDictionary:(NSDictionary *)dict numObjects:(NSInteger)numObjects
{
NSMutableArray *keys = [[[dict allKeys] mutableCopy] autorelease];
[keys shuffle];
numObjects = MIN(numObjects, [keys count]);
NSMutableArray randomObjects = [NSMutableArray arrayWithCapacity:numObjects];
for (int i = 0; i < numObjects; i++) {
[randomObjects addObject:[dict objectForKey:[keys objectAtIndex:i]]];
}
return [NSArray arrayWithArray:randomObjects];
}
这适用于任何NSDictionary
,无论密钥是什么。