Objective c 循环的多个条件
我试图在for循环中使用一个多值。如果我创建两个单独的for循环,代码将重复两次,因此我尝试了以下方法: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 ((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的数组中,然后对该数组进行排序。然后迭代数组,如其他一些答案所示。