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];
 }

このリストの一部をテーブルに表示していますが、内部キーの1つである「頻度」で並べ替えたいと思います。これを行う方法がわかりません。


「なぜこれをネストされた辞書に保存したのか」という最初の考えの場合、アプリの他の部分で単語がNSMutableDictionaryにあるかどうかを頻繁に検索するため、単語をキーにしたかったのです。

「単語」、「頻度」、「カウント」などのキーを備えたフラットな辞書を作成することを考えましたが、単語が含まれているかどうかを確認するには、列挙する必要があります。

より良いデータ構造戦略について何か提案があれば、ぜひ聞いてみたいと思います。「単語」が含まれているかどうかを頻繁にチェックし、「頻度」または「カウント」に基づいてソートする頻度は低くなります。


私はこれに似た質問をたくさん見ましたが、それらはすべてフラットな辞書のためのものです。

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 に答える