循环的多个条件

时间:2012-05-12 12:33:41

标签: objective-c xcode

我试图在for循环中使用多个值。如果我创建两个单独的for循环,代码重复两次,所以我尝试了这个:

for ((NSString* Key in [Dictionary allKeys]) && (NSString* Key2 in [Dictionary allValues])){

但没办法!!我该怎么办?

5 个答案:

答案 0 :(得分:3)

NSDictionary为此提供了一种特殊的基于块的方法:

[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    // do something with key and obj
}];

答案 1 :(得分:1)

首先,变量名称应以小写字母开头。

你知道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 
}

答案 2 :(得分:1)

for-in循环不能像这样工作。它只需要一个实现NSFastEnumeration协议的对象,并循环遍历所有值,没有更多,仅此而已。如果你需要使用键和循环中的值,你必须得到键的值:

for (id key in dictionary) {
   id value = [dictionary valueForKey: key];
   // do stuff with key and value
}

请注意,您无需枚举[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

答案 3 :(得分:0)

在迭代其内容之前,您需要连接两个数组:

NSMutableArray *allKeysAndValues = [NSMutableArray arrayWithArray:[Dictionary allKeys]];
[allKeysAndValues addObjectsFromArray:[Dictionary allValues]];
for (NSString* KeyOrValue in allKeysAndValues) {
    // Do something...
}

更好的方法是使用枚举字典,如下所示:

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

答案 4 :(得分:0)

我认为你不能那样做。只是看一下这一行,就会出现编译器的语义问题。这是否意味着同时迭代Key和Key2?如果两个键都是非零的话,这是否意味着只进入循环?这是否意味着迭代两组的连接?等...

听起来我的词典可能不是您想要做的正确的数据结构。

这不适用于你想要做的事情吗?

for (NSString* Key in [Dictionary allKeys]) {
    NSString* Key2 = [Dictionary objectForKey:Key]?
    // ...
}

或者你可以尝试在一个数组中连接两个集合并迭代,如果这是你想要的行为。