【问题标题】:Get specific NSMutableArray values [closed]获取特定的 NSMutableArray 值
【发布时间】:2014-08-13 19:18:22
【问题描述】:

我有一个看起来完全一样的 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 值的数组或 mutableArray?例如,具有 (11111122, 22222233) 的数组。如何获取与其 nodeName 匹配的 nodeContent 值? 这就像我想获取特定 nodeName 的 nodeContent。

【问题讨论】:

  • NSMutableArrays 没有键->值对。您确定您使用的是NSMutableArray 数据类型而不是NSDictionary 或类似的东西吗?
  • 是的,我确定它是 NSMutableArray :( 如何实现?你有什么想法吗?
  • NSMutableArray 不是稀疏数组。要拥有索引为 22222233 的元素,您的数组需要包含 22222233 个元素。你不想要那个。你想要一个 NSMutableDictionary。或者您想将 nodeContent 和 nodeName 数据存储在数组中,并使用 NSDictionary 作为数组元素的索引。
  • 感谢您的建议,但您能告诉我该怎么做吗?

标签: ios objective-c nsmutablearray nsarray


【解决方案1】:

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

我猜你想遍历所有最里面的字典,查找 nodeName 值为“MyID”的整体,并为这些字典收集 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];
    }
  }
}

【讨论】:

    【解决方案2】:

    很难从您在上面发布的内容中判断您的 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"];
    

    【讨论】:

    • 我从 Wsdl2Code 生成的类中获得了 NSMutableArray,并且在那个 NSMutableArray 中,如您所见,我有一个字段 MyId。我需要将这些 MyId-s 存储在某个数组中,然后在 TableViewController 中显示它们。但我不知道如何获得这些,因为如您所见,所有字段都有 nodeName 和 nodeContent。
    • 然后循环遍历数组并为每个元素创建一个 NSDictionary 键/值对。键是 nodeContent(转换为 NSString)。该值可以是您需要构建以包含该元素的信息的任何类型的数据结构。
    • 你能帮帮我吗? :S 抱歉,感谢您抽出宝贵时间。至少有一些代码示例? ?再次感谢
    • 编辑添加更多示例代码
    • 我不了解 MyObject 部分? :( 和 obj.nodeContent,我得到了一些错误 :(
    【解决方案3】:

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

    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"]];
            }
        }
    }
    

    【讨论】:

    • 我尝试这样做,但我收到一条错误消息:在“NSMutableArray *”类型的对象上找不到属性“附加”:(
    • 这就像我想获取特定nodeName的nodeContent。
    • 这是 Objective C,不是 Swift :) 附加行应该是 [contentsForMyId addObject: element[@"nodeContent"]]
    • LOL 感谢您的更正。来回切换非常困难!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2020-07-07
    相关资源
    最近更新 更多