从订购的嵌套NSDictionary获取值?

时间:2013-07-16 18:15:09

标签: ios objective-c nsdictionary

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但是没有顺序)或者它会抛出一个异常,因为我正在对某些事情进行操作回应它。

1 个答案:

答案 0 :(得分: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];
    ...
}