0

我正在开发一个语言学习应用程序。所以我有一个NSMutableDictionary带有“单词”的键。这些键的对象NSDictionaries与键“频率”和“计数”嵌套。NSNumbers 是“频率”和“计数”的对象。

下面是初始化代码:

 NSString* path = [[NSBundle mainBundle] pathForResource:@"french_top_50000"
                                                     ofType:@"txt"];
 NSString *fh = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL];
 self.userWordlist = [[NSMutableDictionary alloc] init];

 for (NSString *word in fh) {
    NSArray *keyArray = [[NSArray alloc] initWithObjects:@"frequency", @"count", nil];
    NSArray *objectArray = [[NSArray alloc] initWithObjects:frequency, count, nil];
    NSDictionary *detailsDict = [[NSDictionary alloc] initWithObjects:objectArray forKeys:keyArray];

    [self.userWordlist setObject:detailsDict forKey:word];
 }

我在表格中显示了这个列表的一部分,我想按内部键之一“频率”进行排序。我不知道该怎么做。


如果第一个想法是“为什么将它存储在嵌套字典中?”,我希望单词成为键,因为在应用程序的其他部分我经常搜索以查看单词是否在 NSMutableDictionary 中。

我想过有一个带有以下键的平面字典:'word','frequency','count'......但我必须枚举以检查是否包含单词。

如果有任何关于更好的数据结构策略的建议,我很想听听。我将非常频繁地检查是否包含“单词”,而不太频繁地会根据“频率”或“计数”进行排序。


我见过很多与此类似的问题,但它们都是针对平面词典的。

4

1 回答 1

5

如果我理解正确,请keysSortedByValueUsingComparator:像这样使用:

    NSArray *keysByFrequency = [self.userWordlist keysSortedByValueUsingComparator:^NSComparisonResult(NSDictionary* obj1, NSDictionary* obj2) {
         return [obj1[@"frequency"] compare:obj2[@"frequency"]];
    }];

然后您可以迭代按频率排序的键

    for (NSString *word in keysByFrequency){
         NSDictionary *detailsDict = self.userWordList[word];
         // Do whatever...
    }
于 2013-03-12T00:58:56.420 回答