我有一个plist文件,其中包含字典数组
如何遍历此操作并使用键fQty删除所有键和值?我需要删除fQty,以便我可以将字典与新字典进行比较,而不考虑fQty字段。
答案 0 :(得分:0)
试试这个:
- (void) deal:(id)item
{
if ([item isKindOfClass:[NSDictionary class]]) {
for (id key in item) {
id it = [item objectForKey:key];
if ([it isKindOfClass:[NSDictionary class]] || [it isKindOfClass:[NSArray class]]) {
[self deal:it];
}
}
if ([item objectForKey:@"fQty"]!=nil) {
[item setObject:@"0" forKey:@"fQty"];
}
}
if ([item isKindOfClass:[NSArray class]]) {
for (id it in item) {
if ([it isKindOfClass:[NSDictionary class]] || [it isKindOfClass:[NSArray class]]) {
[self deal:it];
}
}
}
}
{
NSError** error = nil;
NSPropertyListFormat format;
NSArray *dma = (NSMutableArray *)[NSPropertyListSerialization
propertyListWithData:[NSData dataWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"XD" ofType:@"plist"]]
options:NSPropertyListMutableContainersAndLeaves
format:&format error:error];
[self deal:dma];
}
现在myArray就是你想要的。
编辑:你想把key @“fQty”的值设置为0,
将for循环中的行更改为[item setObject:@“0”forKey:@“fQty”],就是这样。
再次编辑: 用递归方式解决问题。
答案 1 :(得分:0)
这有点粗糙,但也许你可以使用这样的东西:
-(BOOL)isObjectAdictionary:(id)object{
if([object isKindOfClass:[NSMutableDictionary class]]||[object isKindOfClass:[NSDictionary class]]){
return YES;
}
return NO;
}
-(BOOL)isObjectAnArray:(id)object{
if([object isKindOfClass:[NSMutableArray class]]||[object isKindOfClass:[NSArray class]]){
return YES;
}
return NO;
}
-(id)loop:(id)object removeObjectWithKey:(NSString *)key{
if([self isObjectAdictionary:object]){
NSMutableDictionary *mutableObject = [NSMutableDictionary dictionaryWithDictionary:object];
if([[mutableObject allKeys]containsObject:key]){
[mutableObject removeObjectForKey:key];
object = mutableObject;
return object;
}
}
if([object respondsToSelector:@selector(count)]){
if([self isObjectAdictionary:object]){
NSMutableDictionary *objects_copy = [NSMutableDictionary dictionaryWithDictionary:object];
for(NSString *objects_key in object){
id tempObject = [object valueForKey:objects_key];
tempObject = [self loop:tempObject removeObjectWithKey:key];
[objects_copy setObject:tempObject forKey:objects_key];
}
object =(id)objects_copy;
}
else if([self isObjectAnArray:object]){//an array
NSMutableArray *objects_copy = [NSMutableArray arrayWithArray:object];
for(int i = 0;i<[object count];i++){
id tempObject = [object objectAtIndex:i];
tempObject = [self loop:tempObject removeObjectWithKey:key];
[objects_copy replaceObjectAtIndex:i withObject:tempObject];
}
object = (id)objects_copy;
}
}
return object;
}
您可以这样使用:[self loop:yourArray removeObjectWithKey:@"fQty"]);