我正在尝试通过 for in 循环迭代 NSDictionary。但我希望它从这个集合的末尾开始迭代到它的开始。如何实现此还原?
NSDictionary
是一个无序的数据结构。没有前向迭代或后向迭代的概念。
在 foreach 循环中调用 NSDictionary 时,将循环访问无序列表的键。迭代无序列表时,顺序是未定义的,因此反转顺序也是如此。这类似于将一副纸牌散落在地板上,然后要求某人颠倒顺序。
假设您的键有一些顺序层次结构(数字、字母顺序等),您可以改为获取键集合,并将其排序为特定顺序,然后迭代键集合,或反向迭代该集合。但是,如果这是您经常执行的操作,那么我怀疑NSDictionary
不是针对您的问题的数据结构的最佳选择。
嗯......问题是NSDictionary本质上是无序的。
因此,一个可能的解决方案是用键创建一个NSArray,用"reverseObjectEnumerator"反转该数组,然后在数组上做一个循环,并在字典上使用键。
像这样:
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 * 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];