我发现在Objective-C中访问可变字典键和值有一些困难。

假设我有这个:

NSMutableDictionary *xyz=[[NSMutableDictionary alloc] init];

我可以设置键和值。现在,我只想访问每个键和值,但我不知道设置的键的数量。

在PHP中,这很简单,如下所示:

foreach ($xyz as $key => $value)

这在Objective-C中是如何实现的?


当前回答

for (NSString* key in xyz) {
    id value = xyz[key];
    // do stuff
}

这适用于所有符合NSFastEnumeration协议的类(在10.5+和iOS上可用),尽管NSDictionary是少数几个允许你枚举键而不是值的集合之一。我建议您阅读集合编程主题中的快速枚举。

哦,我应该补充的是,你永远不应该修改一个集合,同时枚举它。

其他回答

你可以使用-[NSDictionary allKeys]来访问所有的键并循环遍历它。

我建议你阅读可可集合编程指南中的枚举:遍历集合的元素部分。这里有您需要的示例代码。

for (NSString* key in xyz) {
    id value = xyz[key];
    // do stuff
}

这适用于所有符合NSFastEnumeration协议的类(在10.5+和iOS上可用),尽管NSDictionary是少数几个允许你枚举键而不是值的集合之一。我建议您阅读集合编程主题中的快速枚举。

哦,我应该补充的是,你永远不应该修改一个集合,同时枚举它。

只是为了不遗漏10.6+选项枚举键和值使用块…

[dict enumerateKeysAndObjectsUsingBlock:^(id key, id object, BOOL *stop) {
    NSLog(@"%@ = %@", key, object);
}];

如果你想让这些动作同时发生:

[dict enumerateKeysAndObjectsWithOptions:NSEnumerationConcurrent
                              usingBlock:^(id key, id object, BOOL *stop) {
    NSLog(@"%@ = %@", key, object);
}];

枚举字典最简单的方法是

for (NSString *key in tDictionary.keyEnumerator) 
{
    //do something here;
}

tDictionary是你想要迭代的NSDictionary或NSMutableDictionary。