这有点奇怪,但这里基本上是你想要做的。创建一个新的NSMutableDictionary。对原始字典进行深度优先遍历,并且每次遇到密钥时,都要在将它设置在新字典中之前加上数字。下面是一个例子实现(写在浏览器中,所以警告执行人):
NSDictionary *numberDict(NSDictionary *original) {
__block int counter = 1;
__block id (^processItem)(id);
processItem = ^(id item) {
id result = item;
if ([item isKindOfClass:[NSArray class]]) {
result = [NSMutableArray array];
[item enumerateObjectsUsingBlock:^(id arrayElement, NSUInteger index, BOOL *stop) {
[result addObject:processItem(arrayElement)];
}];
} else if ([item isKindOfClass:[NSDictionary class]]) {
result = [NSMutableDictionary dictionary];
[item enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) {
NSString *newKey = [NSString stringWithFormat:@"%d - %@", counter++, key];
[result setObject:processItem(value) forKey:newKey];
}];
}
return result;
};
return processItem(original);
}
显然,这将不保留字典键的顺序,因为字典键实际上没有被保存的命令,但你已经表明你知道,并确定。
订单重要吗? – Chuck
不,我不关心订单 – Elfoiros
用于前缀键名的整数必须是唯一的 – Elfoiros