2013-03-12 90 views
0

我正在學習語言學習應用程序。所以我有一個NSMutableDictionary與'詞'作爲關鍵。這些鍵的對象與鍵'頻率'和'計數'嵌套在NSDictionaries中。 NSNumbers是「頻率」和「計數」的對象。在內部嵌套的NSDictionary中按值排序NSDictionary

這裏是初始化代碼:

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' ...但我必須枚舉以檢查是否包含單詞。

如果對於更好的數據結構策略有任何建議,我很樂意聽到他們的意見。我將經常檢查包含'單詞',不太經常會根據'頻率'或'計數'進行排序。


我見過很多類似這樣的問題,但它們都是用於扁平字典。

回答

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... 
    }