从 NSDictionary 按名称获取密钥

Posted

技术标签:

【中文标题】从 NSDictionary 按名称获取密钥【英文标题】:get key by name from NSDictionary 【发布时间】:2011-02-13 11:25:42 【问题描述】:

我有一个嵌套的 NSDictionary NSDictionary。 我在 NSArray *array 中获取字典,并使用 for (NSDictionary *frame in array) 遍历它们。

我想要的是框架的名称。比如[frame getName],这个有什么功能吗?

【问题讨论】:

【参考方案1】:

如果你的数组是这样的

<array>
    <dict>
        <key>name</key>
        <string>My First Frame</string>
        ...
    </dict>
    <dict>
        <key>name</key>
        <string>My Other Frame</string>
        ...
    </dict>
    ...
</array>

然后你将使用它来获取名称:

for (NSDictionary *frame in array) 
    NSString *frameName = [frame objectForKey:@"name"];

但是,如果您的字典实际上不包含框架的名称,那么您就不走运了(在数组中,元素是使用索引而不是键存储的)。

现在,您还提到了上面的“NSDictionaries 的嵌套 NSDictionaries”。例如,如果您有以下结构,其中名称是外部字典中的键:

<dict>
    <key>My First Frame</key>
    <dict>
        <key>width</key>
        <integer>300</integer>
        <key>height</key>
        <integer>200</integer>
        ...
    </dict>
    <key>My Second Frame</key>
    <dict>
        <key>width</key>
        <integer>150</integer>
        <key>height</key>
        <integer>105</integer>
        ...
    </dict>
    ...
</dict>

那么你可以使用这个:

for (NSString *frameName in [outerDict allKeys]) 
    NSDictionary *frame = [outerDict objectForKey:frameName];
    // now you have both the key (frameName) and the value (frame) to work with

【讨论】:

和第二个例子一模一样,谢谢,没有解释清楚【参考方案2】:

不完全理解你的问题,你的意思是通过Key从字典中获取对象

[dict objectForKey:@"key"] 应该知道了。

如果你的意思是有另一个array 存储所有子字典对象,你需要知道根字典中指定子字典的键值:

[[rootDict allKeysForObject:theSpecifySubDictionary] lastObject]

【讨论】:

我认为您的意思是“具体”,而不是“指定”。 “指定”是动词,“具体”是名词。干杯。【参考方案3】:
NSArray *myTemp2Array = [myArray valueForKey:@"Name"];

这将遍历一个数组(包含字典)并在一个漂亮的小数组中返回 @"Name" 键的所有值。

【讨论】:

以上是关于从 NSDictionary 按名称获取密钥的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 NSDictionary 的密钥 [重复]

从 NSDictionary 中按键获取具有特定值的对象

从 NSDictionary 中删除密钥

我的 NSDictionary 的密钥是啥

仅当提供 Web API 密钥名称时才能指定 Web API 密钥

使用 Pyro-nsd 时找不到 Pyro Nameserver