首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSMutablearray中的NSMutablearray

NSMutablearray中的NSMutablearray
EN

Stack Overflow用户
提问于 2011-08-03 02:40:01
回答 3查看 226关注 0票数 0

我有一个数据库,里面有26部电影,每部电影有3个问题。

我所做的是我的程序从数据库中随机选择一个问题,并将其显示在屏幕上。我遇到的问题是记录这个问题,这样它就不会再次被选中。

到目前为止,我一直在玩这个:

代码语言:javascript
复制
    usedMovie_id = [[NSMutableArray alloc] initWithCapacity:26];
    usedQuestion_id = [[NSMutableArray alloc] initWithCapacity:4];

    for (NSInteger i = 0; i < 26; ++i)
    {
        [usedMovie_id addObject:[NSNull null]];
    }
    for (NSInteger i = 0; i < 4; ++i)
    {
        [usedQuestion_id addObject:[NSNull null]];
    }
    while (i < 10) {
        int ii = [self genRandomNumberForMovies];
        int jj = [self genRandomNumberForQuestions:25];
        NSLog(@"ii %d, jj %d", ii,jj);
        [usedQuestion_id replaceObjectAtIndex:jj withObject:[NSNumber numberWithInt:jj]];
        [usedMovie_id replaceObjectAtIndex:ii withObject:usedQuestion_id];
        i++;
        //NSLog(@"movie_id array %@", usedMovie_id);

    }

我的问题是,数组usedQuestion_id在usedMovie_id中的任何索引上都没有不同,它们都是相同的。如果在第一个循环中usedQuestion_id为1,usedMovie_id为13,那么在第二个循环中,usedQuestion_id为1,usedMovie_id为10。在索引13处的usedMovie_id处,usedQuestion_id被更新为1,3(来自第一个循环)。

此外,我需要记录哪些问题已经回答正确和不正确,所以我只显示没有正确回答的问题。

我不想创建26个nsmutablearray,每个都有自己的数据。

我在想,我可能需要一个nsdictionary,甚至一个数据库。此外,我可以在开始时随机化,并循环通过每个问题,而不是在每个问题得到回答后随机化。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-03 02:56:50

如果影片和问题列表从不更改,请将它们放入.plist文件内的NSDictionary中,然后从其中随机抽取。然后,您可以将问题存储在可变数组中,并对照该数组检查重复项。但是你冒着额外处理更多随机电影和问题的风险,这些问题都是重复的。

我确实喜欢你的想法,即将整个问题列表随机化,然后按顺序显示它们。它还将使您有最好的机会将数组的索引与正确/不正确的问题进行匹配。

归根结底,使用CoreData或SQLite db来存储所有内容可能是最有效的选择,但是如果您没有使用它们的经验,或者不想要这样的开销,那么您可以使用.plist文件和数组。

票数 1
EN

Stack Overflow用户

发布于 2011-08-03 02:48:00

这看起来确实像是进入了一个数据库可能会有帮助的领域,特别是如果在某个时候这4部电影变成了40部电影和数千个问题。如果您愿意尝试一下,Core Data在这里可以提供很多帮助。

它还有助于避免硬编码所有这些值,因为您可以从数据库中动态获取它们。

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html

票数 0
EN

Stack Overflow用户

发布于 2011-08-04 21:55:39

这是给任何处在我这个位置的人的。

我所做的就是放弃随机化的想法。相反,我会创建一个数组,将rowids* (因为我的问题列表在数据库中)放入数组,然后将rowids列表打乱**并将该列表放入数组。然后,我可以使用它链接到数据库并绘制一个问题。

这解决了重复问题的问题。

*rowids是特定问题所在的位置。您可能需要创建自己的主键等内容,这取决于您组织问题的方式。但我发现我可以用到机器人。我不再需要先使用movie_id,然后再使用question_id。

**查找fisher-yates算法以进行混洗。还有一些关于stackoverflow的例子,人们已经用代码来回答了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6916918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档