2

我正在设置一个 NSDictionary 对象,以便NSDictionary *scoreObject将播放器的名称作为其,然后将一个可变字典{ date : score }作为其。为了获取数据,我正在提取我在 Parse 中创建的自定义类,它具有属性“Name”、“Score”和“createdAt”。

我正在尝试设置结构,以便可以在 Parse 中的每一行数据中自动提取上述内容,但是当我有两行相同的数据时遇到了麻烦,这些Name数据在我的. 例如,如果 Bob 有两个分数和两个 createdAt 日期,我将如何简单地扩展 values 字典,以便它们仍然可以存储在 key = "Bob" 下?scoreObject

谢谢!

4

2 回答 2

3

尝试这样的事情:

    NSDictionary *dict;
    //this is the dictionary you start with.  You may need to make it an NSMutableDictionary instead.


    //check if the dictionary contains the key you are going to modify.  In this example, @"Bob"
    if ([[dict allKeys] containsObject:@"Bob"]) {
        //there already is an entry for bob so we modify its entry
        NSMutableDictionary *entryDict = [[NSMutableDictionary alloc] initWithDictionary:dict{@"Bob"}];
        [entryDict setValue:@(score) forKey:@"Date"];
        [dict setValue:entryDict forKey:@"Bob"];
    }
    else {
        //There is no entry for bob so we make a new one
        NSDictionary *entryDict = @{@"Date": @(score)};
        [dict setValue:entryDict forKey:@"Bob"];
    }
于 2013-08-02T03:01:50.390 回答
2

这里有一些代码可以帮助你。您可能需要根据您的情况进行一些调整:

在某处分配您的主要字典:

// assuming its a property
self.scoreObject = [NSMutableDictionary new];

现在,每当您为名称设置新的配对日期/分数时,首先检查该名称是否已经有任何条目。如果是,则使用先前分配的 NSMutableDictionary 来存储新对。如果没有,分配一个,然后设置新的对。

我将它封装在一个接收日期和分数的方法中。

-(void)addNewScore:(NSString*)score AndDate:(NSString*)date forUsername:(NSString*)username
{

    NSMutableDictionary *scoresForUser = self.scoreObject[username]; //username is a string with the name of the user, e. g. @"Bob"

    if (!scoresForUser)
    {
        scoresForUser = [NSMutableDictionary new];
        self.scoreObject[username] = scoresForUser
    }

    scoresForUser[date] = score; //setting the new pair date/score in the NSMutableDictionary of scores of that giver user.

}

ps:我在示例中使用日期和分数作为字符串,但如果您愿意,您可以使用 NSDate 或 NSNumber,无需更改。

现在,您可以使用以下内容列出用户的所有分数:

-(void)listScoresForUser:(NSString*)username
{
   NSMutableDictionary *scoresForUser = self.scoreObject[username];

   for (NSString *date in [scoresForUser allKeys]) {
        NSString *score = scoresForUser[date];
        NSLog(@"%@ - score: %@, createdAt: %@", username, score, date);
   }
}

这样,您应该能够将数据存储在您想要的结构中。请让我知道这是否是您正在寻找的东西。

于 2013-08-02T02:44:03.430 回答