获取特定的NSMutableArray值

时间:2014-06-23 16:49:03

标签: ios objective-c nsmutablearray nsarray

我有一个看起来完全像这样的NSMutableArray:

(
    {
        nodeChildArray = (
            {
                nodeContent = 11111122;
                nodeName = MyId;
            },
            {
                nodeName = ShowTask;
            },
            {
                nodeContent = 11115295;
                nodeName = MyNumber;
            },
            {
                nodeContent = 000003;
                nodeName = CatId;
            },
        );
        nodeName = Request;
    },
    {
        nodeChildArray = (
            {
                nodeContent = 22222233;
                nodeName = MyId;
            },
            {
                nodeName = ShowTask;
            },
            {
                nodeContent = 11115295;
                nodeName = MyNumber;
            },
            {
                nodeContent = 000003;
                nodeName = CatId;
            },
    );
        nodeName = Request;
    }
)

如何创建包含MyId值的array或mutableArray?例如,具有(11111122,22222233)的数组。如何使nodeContent的值与其nodeName匹配? 这就像我想获得特定nodeName的nodeContent。

3 个答案:

答案 0 :(得分:0)

很难说你的NSMutableArray看起来像你上面发布的内容,但我认为它包含的内容看起来像这样:

@interface MyObject
{
    NSInteger nodeContent;
    NSString *nodeName;
}

您希望循环遍历数组的所有元素,并从每个元素创建一个NSDictionary键/值对:

NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init];
// myArray is the NSMutableArray you got from (wherever)
for (MyObject obj in myArray)
{
    NSString *key = [NSString stringWithFormat:@"%d", obj.nodeContent];
    [myDictionary setObject:obj forKey:key];
}

现在你有一个包含以下键的NSMutableDictionary:

11111122
22222233

每个键都有一个与之关联的对象。该对象与原始数组中的对象相同。然后,您可以使用以下方法检索对象:

MyObject *myObj = [myDictionary objectForKey:@"11111122"];

答案 1 :(得分:0)

也许这样的事情会起作用:

NSMutableArray *contentsForMyId = [NSMutableArray array];
for (NSDictionary *dict in YOURARRAY) {
    for (NSDictionary *element in (NSArray*)dict[@"nodeChildArray"]) {
        if ([element[@"nodeName"] isEqualToString:@"MyId"]) {
            [contentsForMyId addObject:element[@"nodeContent"]];
        }
    }
}

答案 2 :(得分:0)

查看您发布的数据,我看到了一个外部字典数组。每个字典都包含它自己的字典数组。内部字典包含您的实际数据,其中包含NodeContent和NodeName。

我猜你想要遍历所有最里面的词典,找到nodeName值为" MyID"的entires,并收集这些词典的NodeContent值数组。

要绘制数据结构图,我就是这样看的:

Array
  Dictionary
    array
       Dictionary

所以代码可能如下所示:

NSMutableArray *nodeContents = [NSMutableArray new];

for (NSDictionary *outerDict in outerArray)
{
  NSArray *nodeChildArray = outerDict[@"nodeChildArray];
  for (NSDictionary innerDict in nodeChildArray)
  {
    if ([innerDict[@"nodeName"] isEqualToString "MyID"])
    {
      NSString *thisNodeContent = innerDict[@"nodeContent"];
      if (thisNodeContent != nil)
      [nodeContents addObject: thisNodeContent];
    }
  }
}