【问题标题】:Combine two NSMutableDictionarys with same key将两个 NSMutableDictionary 与相同的键组合
【发布时间】:2014-01-04 04:50:48
【问题描述】:

我正在尝试组合两个 NSMutableDictionary,但我遇到的问题是当我添加它们时它只会覆盖另一个。例如字典 A 有以下数据:

{
    StationLogs = (
                {
            log = "This is the Log Text";
            timeStamp = "2014-01-04 04:31:04 +0000";
            title = Title;
        }
    );
}

字典 2 会有这些数据:

{
        StationLogs = (
        {
            log = "logText";
            timeStamp = "2014-01-04 04:35:04 +0000";
            title = Title2;
        }
    );
}

我如何让它们合并看起来像这样:

    {
        StationLogs = (
        {
            log = "This is the Log Text";
            timeStamp = "2014-01-04 04:31:04 +0000";
            title = Title;
        },
        {
            log = "logText";
            timeStamp = "2014-01-04 04:35:04 +0000";
            title = Title2;
        }
    );
}

我搜索了堆栈溢出和网络的其余部分,但找不到任何东西。如果这个问题已经得到解答,我很抱歉,但我找不到它,因为我没有在搜索正确的短语。

谢谢, 斯凯拉

【问题讨论】:

  • 只需为每个值使用不同的键。使用字典是基础——你应该阅读一本编程书籍,甚至只是苹果的 Objective-c 和类参考文档,因为如果你在没有任何基础的情况下尝试编写代码,你会遇到很多问题。
  • 您不能使用相同的键添加已经在 dict 中可用的数据。如果您想获得一个 dictnry 并为键 StationLogs 添加数组,现在您将 dictnar 添加到包含数据的 arry 中,您将获得相同的数据你在约会
  • 我不使用相同密钥的原因是我需要能够将数据添加到同一组以获取多条消息,该程序连接了大约 35 个工作站,每个工作站都有自己的数据集,当他们提交数据时,我想将其添加到档案中,最好的方法是将它们分开,而不是把它们都扔进去。我可能是错的,但在我的情况下,程序的其余部分就是这样已经写好了。
  • 嘿,如果想要这样做,它不需要用不同的键存储。这没什么大不了的,或者工作很小,但你必须做一点工作才能得到它,或者使用数组 ok 达到 req 以上等等,我会给你一些代码,让你如何实现它

标签: objective-c nsmutabledictionary


【解决方案1】:

您可以遍历每个数据集并创建合并的数据集

    NSMutableDictionary *dict1; //Your first set of data
    NSMutableDictionary *dict2; //Your second set of data

    NSArray *keys1 = [dict1 allKeys];
    NSArray *keys2 = [dict2 allKeys];

    NSMutableDictionary *combinedDictionary = [NSMutableDictionary dictionary];

    //Iterating through first data set
    for (id key in keys1) {
        NSArray *array = [dict1 objectForKey:key];

        NSMutableArray *subArray = [combinedDictionary objectForKey:key];
        if (!subArray) {
            subArray = [NSMutableArray array];
            [combinedDictionary setObject:subArray forKey:key];
        }

        [subArray addObjectsFromArray:array];
    }

    //Iterating through second data set
    for (id key in keys2) {
        NSArray *array = [dict2 objectForKey:key];

        NSMutableArray *subArray = [combinedDictionary objectForKey:key];
        if (!subArray) {
            subArray = [NSMutableArray array];
            [combinedDictionary setObject:subArray forKey:key];
        }

        [subArray addObjectsFromArray:array];
    }

您可以将合并的数据替换为您已有的NSMutableDictionary 之一,而不是将新的NSMutableDictionary 创建为combinedDictionary

【讨论】:

  • @OstlerDev 你需要这个吗?
【解决方案2】:

字典基本上是一组键值对。你的字典 A 和字典 2 说明了这一点。但是在您的组合“字典”中,您拥有的是一组两个字典,而不是一组键值对。换句话说,不可能像这样组合字典,因为您期望的结果不是字典。如果你想要一套字典,请使用NSSetNSArray(推荐)

【讨论】:

    【解决方案3】:

    这对你有帮助吗...

    NSMutableDictionary *dict=[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"This is the Log Text",@"log",@"2014-01-04 04:31:04 +0000",@"timeStamp",@"Title",@"title", nil];
    
    NSMutableDictionary *dict1=[[NSMutableDictionary alloc] initWithObjectsAndKeys:@"Log Text",@"log",@"2014-01-04 04:35:04 +0000",@"timeStamp",@"Title2",@"title", nil];
    
    NSArray *arr=[NSArray arrayWithObject:dict];
    NSArray *arr1=[NSArray arrayWithObject:dict1];
    
    //here is your first dictnary
    NSMutableDictionary *dictm1=[[NSMutableDictionary alloc]initWithObjectsAndKeys:arr,@"StationLogs", nil];
    
    
    NSLog(@"%@",dictm1);
    
     //here is your second dictionary
    NSMutableDictionary *dictm2=[[NSMutableDictionary alloc]initWithObjectsAndKeys:arr1,@"StationLogs", nil];
    NSLog(@"%@",dictm2);
    
    //now here you get array of dictnary which is storted with key value "StationLogs" for first didtnary
    NSArray *tempArray=[[NSArray alloc]initWithArray:[dictm1 objectForKey:@"StationLogs"]];
    NSLog(@"%@",tempArray);
    
      //now here you get array of dictnary whaich is storted with key value "StationLogs" for second didtnary
    NSMutableArray *tempArray1=[[NSMutableArray alloc]initWithArray:[dictm2 objectForKey:@"StationLogs"]] ;
    
    [tempArray1 addObjectsFromArray:tempArray];
    
    //now adding value of second dictionary to first dict
    [dictm1 setValue:tempArray1 forKey:@"StationLogs"];
    
    NSLog(@"%@",dictm1);
    

    如果你能让它变得简洁,我已经做得很简单了 喜欢编码

    【讨论】:

      猜你喜欢
      • 2021-05-14
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 2019-05-03
      • 2018-01-13
      • 2015-01-21
      • 2014-03-06
      • 1970-01-01
      相关资源
      最近更新 更多