Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.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中从收集结束而不是从开始实现for-in循环?_Objective C_Ios_For In Loop - Fatal编程技术网

如何在Objective-C中从收集结束而不是从开始实现for-in循环?

如何在Objective-C中从收集结束而不是从开始实现for-in循环?,objective-c,ios,for-in-loop,Objective C,Ios,For In Loop,我正在尝试通过for-in循环迭代NSDictionary。但我希望它从这个集合的末尾开始迭代到它的开始。如何实现此恢复?NSDictionary是一个无序的数据结构。没有正向迭代或反向迭代的概念 在foreach循环中调用NSDictionary时,您正在对无序的键列表进行迭代。当迭代无序列表时,顺序是未定义的,因此颠倒顺序也是未定义的。这就好比把一副牌撒在地板上,然后让别人倒序 假设您的密钥有数字、字母等顺序层次结构,您可以取而代之的是获取密钥集合,并将其按特定顺序排序,然后迭代密钥集合,或

我正在尝试通过for-in循环迭代NSDictionary。但我希望它从这个集合的末尾开始迭代到它的开始。如何实现此恢复?

NSDictionary是一个无序的数据结构。没有正向迭代或反向迭代的概念

在foreach循环中调用NSDictionary时,您正在对无序的键列表进行迭代。当迭代无序列表时,顺序是未定义的,因此颠倒顺序也是未定义的。这就好比把一副牌撒在地板上,然后让别人倒序

假设您的密钥有数字、字母等顺序层次结构,您可以取而代之的是获取密钥集合,并将其按特定顺序排序,然后迭代密钥集合,或者反向迭代该密钥集合。但是,如果这是您经常执行的操作,那么我怀疑NSDictionary不是解决您问题的数据结构的最佳选择。

NSDictionary是一种无序的数据结构。没有正向迭代或反向迭代的概念

NSArray * a = @[@"a",@"b",@"c"];
NSArray * b = [[a reverseObjectEnumerator] allObjects];
for (NSString * obj in b) {
    NSLog(@"%@",obj);
}
在foreach循环中调用NSDictionary时,您正在对无序的键列表进行迭代。当迭代无序列表时,顺序是未定义的,因此颠倒顺序也是未定义的。这就好比把一副牌撒在地板上,然后让别人倒序

假设您的密钥有数字、字母等顺序层次结构,您可以取而代之的是获取密钥集合,并将其按特定顺序排序,然后迭代密钥集合,或者反向迭代该密钥集合。但是,如果这是您经常执行的操作,那么我怀疑NSDictionary不是解决您的问题的数据结构的最佳选择

NSArray * a = @[@"a",@"b",@"c"];
NSArray * b = [[a reverseObjectEnumerator] allObjects];
for (NSString * obj in b) {
    NSLog(@"%@",obj);
}
打印c、b、a。 尝试按如下方式反转字典的键:

NSArray * key = [[[dict allKeys] reverseObjectEnumerator] allObjects];
NSDictionary *_dict = [NSDictionary dictionaryWithObjectsAndKeys:
                       @"firstValue",@"firstKey",
                       @"secondValue",@"secondKey",
                       @"thirdValue",@"thirdKey",
                       nil];

NSArray *keysNormal   = [_dict allKeys];
NSArray *keysReversed = [[[_dict allKeys] reverseObjectEnumerator] allObjects];

for(NSString *str in keysNormal)
{
    NSLog(@"%@", [_dict objectForKey:str]);
}

for(NSString *str in keysReversed)
{
    NSLog(@"%@", [_dict objectForKey:str]);
}
打印c、b、a。 尝试按如下方式反转字典的键:

NSArray * key = [[[dict allKeys] reverseObjectEnumerator] allObjects];
NSDictionary *_dict = [NSDictionary dictionaryWithObjectsAndKeys:
                       @"firstValue",@"firstKey",
                       @"secondValue",@"secondKey",
                       @"thirdValue",@"thirdKey",
                       nil];

NSArray *keysNormal   = [_dict allKeys];
NSArray *keysReversed = [[[_dict allKeys] reverseObjectEnumerator] allObjects];

for(NSString *str in keysNormal)
{
    NSLog(@"%@", [_dict objectForKey:str]);
}

for(NSString *str in keysReversed)
{
    NSLog(@"%@", [_dict objectForKey:str]);
}

嗯。。。问题是,字典本质上是无序的

因此,一个可能的解决方案是使用键创建一个NSArray,使用reverseObjectEnumerator反转该数组,然后在该数组上创建一个循环,并使用字典上的键

大概是这样的:

NSArray * key = [[[dict allKeys] reverseObjectEnumerator] allObjects];
NSDictionary *_dict = [NSDictionary dictionaryWithObjectsAndKeys:
                       @"firstValue",@"firstKey",
                       @"secondValue",@"secondKey",
                       @"thirdValue",@"thirdKey",
                       nil];

NSArray *keysNormal   = [_dict allKeys];
NSArray *keysReversed = [[[_dict allKeys] reverseObjectEnumerator] allObjects];

for(NSString *str in keysNormal)
{
    NSLog(@"%@", [_dict objectForKey:str]);
}

for(NSString *str in keysReversed)
{
    NSLog(@"%@", [_dict objectForKey:str]);
}
日志是:

第三值 第二价值 第一价值 第一价值 第二价值 第三值
嗯。。。问题是,字典本质上是无序的

因此,一个可能的解决方案是使用键创建一个NSArray,使用reverseObjectEnumerator反转该数组,然后在该数组上创建一个循环,并使用字典上的键

大概是这样的:

NSArray * key = [[[dict allKeys] reverseObjectEnumerator] allObjects];
NSDictionary *_dict = [NSDictionary dictionaryWithObjectsAndKeys:
                       @"firstValue",@"firstKey",
                       @"secondValue",@"secondKey",
                       @"thirdValue",@"thirdKey",
                       nil];

NSArray *keysNormal   = [_dict allKeys];
NSArray *keysReversed = [[[_dict allKeys] reverseObjectEnumerator] allObjects];

for(NSString *str in keysNormal)
{
    NSLog(@"%@", [_dict objectForKey:str]);
}

for(NSString *str in keysReversed)
{
    NSLog(@"%@", [_dict objectForKey:str]);
}
日志是:

第三值 第二价值 第一价值 第一价值 第二价值 第三值
首先对键进行排序,然后进行反向排序。否则,只要您向NSDictionary添加元素,它就会完全改变顺序。这并不能回答问题。问题是试图对字典进行反向迭代,因为字典没有顺序的概念,所以一开始就没有任何意义。您的数组解决方案不适用于此问题。请先对键进行排序,然后再进行反向排序。否则,只要您向NSDictionary添加元素,它就会完全改变顺序。这并不能回答问题。问题是试图对字典进行反向迭代,因为字典没有顺序的概念,所以一开始就没有任何意义。您的阵列解决方案不适用于此问题。确定。但当我用JSON动态地向it消息流中添加数据时,我看到它们是按照我添加它们的顺序出现的。因此,我想以某种方式迭代NSDictionary并捕获最后一个消息结构,其中的特定标志设置为1。所以我需要从头开始迭代,对吗?或者可能有更符合逻辑的方法-我是Objective-C world的新手。顺序未定义,您不能期望密钥集合中的最后一个密钥是插入到NSDictionary中的最后一个元素。如果您知道您需要最后一条标志设置为1的消息,那么您是否可以在收到消息时检查每条消息,如果它的标志设置为1,请将其存储在NSDictionary之外的某个人?这样,您就可以快速访问标志为1Ok的最后一条消息。但当我用JSON动态地向it消息流中添加数据时,我看到它们是按照我添加它们的顺序出现的。因此,我想以某种方式迭代NSDictionary并捕获最后一个消息结构,其中的特定标志设置为1。所以我需要从头开始迭代,对吗?或者可能有更符合逻辑的方法-我是Objective-C world的新手。顺序未定义,您不能期望密钥集合中的最后一个密钥是插入到NSDictionary中的最后一个元素。如果您知道您需要最后一条标志设置为1的消息,那么您是否可以在收到消息时检查每条消息,如果它的标志设置为1,请将其存储在NSDictionary之外的某个人?这样,您就可以快速访问标志为1的最后一条消息