Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 循环的多个条件_Objective C_Xcode - Fatal编程技术网

Objective c 循环的多个条件

Objective c 循环的多个条件,objective-c,xcode,Objective C,Xcode,我试图在for循环中使用一个多值。如果我创建两个单独的for循环,代码将重复两次,因此我尝试了以下方法: for ((NSString* Key in [Dictionary allKeys]) && (NSString* Key2 in [Dictionary allValues])){ 但是不行!!怎么做呢?首先,变量名应该以小写字母开头 你知道for循环的通常形式吗?您正在使用的只是一条捷径: for (int i = 0; i < [myArray count];

我试图在for循环中使用一个多值。如果我创建两个单独的for循环,代码将重复两次,因此我尝试了以下方法:

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

但是不行!!怎么做呢?

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

你知道for循环的通常形式吗?您正在使用的只是一条捷径:

for (int i = 0; i < [myArray count]; i++) {
    id obj = [myArray objectAtIndex:i];
    // do something with the object
}
[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    // do something with key and obj
}];
所以在你的情况下,你可以写

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循环的通常形式吗?您正在使用的只是一条捷径:

for (int i = 0; i < [myArray count]; i++) {
    id obj = [myArray objectAtIndex:i];
    // do something with the object
}
[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    // do something with key and obj
}];
所以在你的情况下,你可以写

NSArray *allKeys = [dictionary allKeys];
for (int i = 0; i < [allKeys count]; i++) {
    NSString *key = [allKeys objectAtIndex:i];
    NSObject *obj = [dictionary objectForKey:key];
    // do something 
}

在迭代两个数组的内容之前,需要将它们连接起来:

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);
}];

在迭代两个数组的内容之前,需要将它们连接起来:

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);
}];

我认为你做不到。只要看看这行代码,编译器就有一个语义问题。这是否意味着并行迭代Key和Key2?这是否意味着只有在两个键都非nil时才能进入循环?这是否意味着通过两个集合的串联进行迭代?等等

在我看来,您的字典可能不是您想要做的事情的正确数据结构

这对你正在做的事情不起作用吗

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

或者,您可以尝试将两个集合串联在一个数组中,然后进行迭代,如果这是您想要的行为。

我认为您无法做到这一点。只要看看这行代码,编译器就有一个语义问题。这是否意味着并行迭代Key和Key2?这是否意味着只有在两个键都非nil时才能进入循环?这是否意味着通过两个集合的串联进行迭代?等等

在我看来,您的字典可能不是您想要做的事情的正确数据结构

这对你正在做的事情不起作用吗

for (NSString* Key in [Dictionary allKeys]) {
    NSString* Key2 = [Dictionary objectForKey:Key]?
    // ...
}
或者,您可以尝试在单个数组中连接两个集合,然后进行迭代(如果需要)。

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

for (int i = 0; i < [myArray count]; i++) {
    id obj = [myArray objectAtIndex:i];
    // do something with the object
}
[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    // do something with key and obj
}];
NSDictionary为此提供了一种特殊的基于块的方法:

for (int i = 0; i < [myArray count]; i++) {
    id obj = [myArray objectAtIndex:i];
    // do something with the object
}
[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    // do something with key and obj
}];

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或更高版本,则可以使用基于块的方法EnumerateKeysandObjectsSusingBlock::


使用基于块的方法,您可以将*stop设置为YES以中断循环,而您可以在常规循环中使用break。

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或更高版本,则可以使用基于块的方法EnumerateKeysandObjectsSusingBlock::


使用基于块的方法时,您可以将*stop设置为YES以中断循环,而您可以在常规循环中使用break。

我尝试添加此选项,但没有成功。它允许你做什么?我现在遇到的主要问题是数据没有按顺序显示,而是混淆了。这能解决问题吗?当然不能排序。字典的键按定义具有未定义的顺序。如果要对键进行排序,请将它们放入包含allKeys的数组中,然后对该数组进行排序。然后在数组上迭代,如其他一些答案所示。我尝试添加这个,但没有成功。它允许你做什么?我现在遇到的主要问题是数据没有按顺序显示,而是混淆了。这能解决问题吗?当然不能排序。字典的键按定义具有未定义的顺序。如果要对键进行排序,请将它们放入包含allKeys的数组中,然后对该数组进行排序。然后迭代数组,如其他一些答案所示。