我在Objective-C中访问可变字典的键和值时遇到了一些困难。
假设我有以下字典:
NSMutableDictionary *xyz=[[NSMutableDictionary alloc] init];
我可以设置键和值。现在,我只想访问每个键和值,但我不知道设置了多少个键。
在 PHP 中,这非常简单,可以使用以下代码:
foreach ($xyz as $key => $value)
在 Objective-C 中如何实现?
我在Objective-C中访问可变字典的键和值时遇到了一些困难。
假设我有以下字典:
NSMutableDictionary *xyz=[[NSMutableDictionary alloc] init];
我可以设置键和值。现在,我只想访问每个键和值,但我不知道设置了多少个键。
在 PHP 中,这非常简单,可以使用以下代码:
foreach ($xyz as $key => $value)
在 Objective-C 中如何实现?
为了不遗漏使用块枚举键和值的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);
}];
... enumerateKeysAndObjectsUsingBlock:^(NSNumber *key, UIImage *img, BOOL *stop) { ...
。 - mkko如果您需要在枚举时改变字典:
for (NSString* key in xyz.allKeys) {
[xyz setValue:[NSNumber numberWithBool:YES] forKey:key];
}
allKeys
返回键的副本。因此,对字典进行变异是安全的。 - Honghao Z枚举字典最简单的方法是
for (NSString *key in tDictionary.keyEnumerator)
{
//do something here;
}
其中tDictionary
是您想要迭代的NSDictionary
或NSMutableDictionary
。
快速枚举是在10.5和iPhone操作系统中添加的,它比旧方法更快,不仅仅是语法糖。如果你需要针对老版本运行时(即10.4及以前版本),你必须使用旧的枚举方法:
NSDictionary *myDict = ... some keys and values ...
NSEnumerator *keyEnum = [myDict keyEnumerator];
id key;
while ((key = [keyEnum nextObject]))
{
id value = [myDict objectForKey:key];
... do work with "value" ...
}
您没有释放枚举器对象,也无法重置它。如果您想重新开始,请从字典中请求一个新的枚举器对象。
-[NSDictionary allKeys]
来访问所有的键,并循环遍历它。