2013-04-14 42 views
0

我有NSMutableDictionary,看起来像这样:的NSDictionary:找到一个特定的对象,并删除它

category =  (
      { 
     description =    (
          { 
       id = 1; 
       name = Apple; 
      }, 
          { 
       id = 5; 
       name = Pear; 
      }, 
          { 
       id = 12; 
       name = Orange; 
      } 
     ); 
     id = 2; 
     name = Fruits; 
    }, 
      { 
     description =    (
          { 
       id = 4; 
       name = Milk; 
      }, 
          { 
       id = 7; 
       name = Tea; 
      } 
     ); 
     id = 5; 
     name = Drinks; 
    } 
); 

现在,当用户在应用程序中执行一个动作,我得到了@“名称”值的对象,如“Apple”。我想从字典中删除该对象,但我怎样才能达到这个对象与

[myDictionary removeObjectForKey:] 

方法?

+0

这听起来像你真正想要做的是从'description'数组中删除一个对象,你想要删除的对象是具有给定名称的对象。正确? – rmaddy

+0

嗨rmaddy,这是正确的! – marsrover

+0

剥洋葱。一次一层。 –

回答

2

在高层次上,您需要获取对“description”数组的引用。然后遍历数组获取每个字典。检查字典以查看它是否具有匹配的“名称”值。如果是这样,请从“description”数组中删除该字典。

NSString *name = ... // the name to find and remove 
NSMutableArray *description = ... // the description array to search 
for (NSUInteger i = 0; i < description.count; i++) { 
    NSDictionary *data = description[i]; 
    if ([data[@"name"] isEqualToString:name]) { 
     [description removeObjectAtIndex:i]; 
     break; 
    } 
} 
+0

当然,他在一个数组里面的两个单独的字典里有两个描述数组,它们在他没有向我们显示的字典的“类别”元素内。 –

+0

@HotLicks我想,如果他能够到达“苹果”对象开始,他应该知道如何获得适当的“字典”数组的引用。 :) – rmaddy

+0

谢谢,但我似乎无法正确描述数组。关于“苹果”的价值,我直接拿到了,不需要翻阅字典。 @HotLicks我想我展示了完整的字典。 – marsrover

1

在一个内部数组中删除的内容:

NSString* someFood = <search argument>; 
NSArray* categories = [myDictionary objectForKey:@"category"]; 
for (NSDictionary* category in categories) { 
    NSArray* descriptions = [category objectForKey:@"description"]; 
    for (int i = descriptions.count-1; i >= 0; i--) { 
     NSDictionary* description = [descriptions objectForIndex:i]; 
     if ([[description objectForKey:@"name"] isEqualToString:someFood]) { 
      [descriptions removeObjectAtIndex:i]; 
     } 
    } 
} 

要删除整个组(例如,“水果”)从外阵列是简单的。

+2

仅供参考 - 您不能在'NSArray'上调用'removeObjectAtIndex:'。 – rmaddy

+0

@rmaddy - 啊,真的。该数组必须先被复制到可变区(如果尚未)。错过了这一点。 (一般来说,如果从JSON解析中接收数组,则数组不会是可变的。而且,要替换该数组,*包含*对象必须是可变的,一直回到根。) –

+0

谢谢,这似乎工作,但(对不起因为在屁股中存在这样的痛苦),这并不会从最初的NSDictionary中删除对象,这是关键部分。 – marsrover

相关问题