我试图在 for 循环中使用多个值。如果我创建两个单独的 for 循环,代码会重复两次,所以我尝试了这个:
for ((NSString* Key in [Dictionary allKeys]) && (NSString* Key2 in [Dictionary allValues])){
但是没办法!!我该怎么做??
我试图在 for 循环中使用多个值。如果我创建两个单独的 for 循环,代码会重复两次,所以我尝试了这个:
for ((NSString* Key in [Dictionary allKeys]) && (NSString* Key2 in [Dictionary allValues])){
但是没办法!!我该怎么做??
NSDictionary
为此提供了一种特殊的基于块的方法:
[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
// do something with key and obj
}];
首先,变量名应该以小写字母开头。
你知道 for 循环的“通常”形式吗?您正在使用的只是一个捷径:
for (int i = 0; i < [myArray count]; i++) {
id obj = [myArray objectAtIndex:i];
// do something with the object
}
所以在你的情况下,你可以写
NSArray *allKeys = [dictionary allKeys];
for (int i = 0; i < [allKeys count]; i++) {
NSString *key = [allKeys objectAtIndex:i];
NSObject *obj = [dictionary objectForKey:key];
// do something
}
for-in 循环不是这样工作的。它只需要一个对象来实现NSFastEnumeration
协议并循环所有值,不多也不少。如果您需要在循环中使用键和值,则必须获取键的值:
for (id key in dictionary) {
id value = [dictionary valueForKey: key];
// do stuff with key and value
}
请注意,您不需要枚举 over [dictionary allKeys]
,NSDictionary
实现NSFastEnumeration
枚举键。
如果您不想自己查找值并且您的目标是可用块的操作系统(iOS 4.0 和 Mac OS X 10.6 或更高版本),您可以使用基于块的方法enumerateKeysAndObjectsUsingBlock:
:
[dictionary enumerateKeysAndObjectsUsingBlock:^( id key, id value, BOOL *stop ) {
// do stuff with key and value
}];
使用您设置的基于块的方法*stop
来YES
跳出循环,同时您可以break
在常规循环中使用。
在迭代它们的内容之前,您需要连接两个数组:
NSMutableArray *allKeysAndValues = [NSMutableArray arrayWithArray:[Dictionary allKeys]];
[allKeysAndValues addObjectsFromArray:[Dictionary allValues]];
for (NSString* KeyOrValue in allKeysAndValues) {
// Do something...
}
更好的方法是使用block枚举您的字典,如下所示:
[Dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id object, BOOL *stop) {
NSLog(@"%@ = %@", key, object);
}];
我不认为你能做到这一点。只看这条线,编译器就存在语义问题。这是否意味着同时并行迭代 Key 和 Key2 ?这是否意味着只有在两个键都非零时才进入循环?这是否意味着通过两个集合的连接进行迭代?ETC...
在我看来,您的 Dictionary 可能不是您想要做的正确数据结构。
这对你想做的事情不起作用吗?
for (NSString* Key in [Dictionary allKeys]) {
NSString* Key2 = [Dictionary objectForKey:Key]?
// ...
}
或者,您可以尝试将两个集合连接到一个数组中并进行迭代,如果这是您想要的行为。