1
dictionary = (_NSDictionaryM) 3 key/value pairs
    [0] = @"CELL2" : 1 : key/value pair
        key = (__NSCFString) @"CELL2"
        value = (__NSDictionaryM) 1 key/value pair
            [0] = @"download" : @"Text Response"
                key = (__NSCFString) @"download"
                value = (__NSCFString) "Text Response"
    [1] = @"CELL1" : 1 : key/value pair
        key = (__NSCFString) @"CELL1"
        value = (__NSDictionaryM) 1 key/value pair
            [0] = @"download" : @"Text Response"
                key = (__NSCFString) @"download"
                value = (__NSCFString) "Text Response"
    [2] = @"CELL3" : 1 : key/value pair
        key = (__NSCFString) @"CELL3"
        value = (__NSDictionaryM) 1 key/value pair
            [0] = @"download" : @"Text Response"
                key = (__NSCFString) @"download"
                value = (__NSCFString) "Text Response"

上記のような辞書があります。高速な列挙を使用して、「テキスト応答」を取得できます (これは最終的に必要なものであり、他のことは気にしません)。問題は、それらを配列に格納するときに、それらを順番に取得する必要があることです。私がそれらを取得する順序は、辞書ごとに一貫しています (2, 1, 3,たとえば、常に取得します) が、使用している辞書ごとに異なります。

追加情報: dictionary任意の数のエントリを持つことができますが、その内部は常に同じであり、辞書からデータを取得する必要があり、他の方法では配信できません。

私が試した試みは、現在と同じ結果になります (text responseただし、順序が正しくありません)。または、応答しないものに対してアクションを実行しているため、例外がスローされます。

4

1 に答える 1

3

高速列挙は、辞書キーを実装定義の順序 (具体的には、その辞書のキーのハッシュ コードと一致する順序) で取得します。特定の順序を強制する必要がある場合は、キーをディクショナリから に取り出し、NSArrayその配列を好みに合わせて並べ替えてから、並べ替えられた順序で各キーのディクショナリから値を取り出して、配列を高速反復処理します。

NSDictionary *dict = ...
// You can use any of the sortedArrayUsingXYZ methods below
NSArray *sortedKeys = [[dict allKeys] sortedArrayUsingDescriptors:...];
for (NSString *key in sortedKeys) {
    id obj = [dict getObjectForKey:key];
    ...
}
于 2013-07-16T18:20:19.450 に答える