【问题标题】:Compare values of one dictionary to keys of another dictionary将一个字典的值与另一字典的键进行比较
【发布时间】:2016-06-22 11:37:44
【问题描述】:

我有两本字典,如下所示:

Dictionary 1:
keyIdDict {
    "Feb 5, 2015" =     (
        607
    );
    "Nov 9, 2009" =     (
        431,
        433,
        435
 );
}

Dictionary 2:
rollImageDict {
    607 = "/Users/betteruse/Pictures/iPhoto Library.photolibrary/Masters/2014/10/21/20141021-160023/06122009123.jpg";
    433 = "/Users/betteruse/Pictures/iPhoto Library.photolibrary/Masters/2014/10/21/20141021-160023/06122009124.jpg";
    417 = "/Users/betteruse/Pictures/iPhoto Library.photolibrary/Masters/2014/10/21/20141021-160023/06122009125.jpg";
    419 = "/Users/betteruse/Pictures/iPhoto Library.photolibrary/Masters/2014/10/21/20141021-160023/06122009126.jpg";
    421 = "/Users/betteruse/Pictures/iPhoto Library.photolibrary/Masters/2014/10/21/20141021-160023/06122009129.jpg";
    435 = "/Users/betteruse/Pictures/iPhoto Library.photolibrary/Masters/2014/10/21/20141021-160023/06122009130.jpg";
}

我想用"/Users/betteruse/Pictures/iPhoto Library.photolibrary/Masters/2014/10/21/20141021-160023/06122009123.jpg"替换第一个字典中的值,即607

预期的最终结果:

keyIdDict {
    "Feb 5, 2015" =     (
        "/Users/betteruse/Pictures/iPhoto Library.photolibrary/Masters/2014/10/21/20141021-160023/06122009123.jpg"
    );
}

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: objective-c macos cocoa nsdictionary nsmutabledictionary


    【解决方案1】:

    给你:

    NSMutableDictionary *newDictionary = [NSMutableDictionary dictionary];
    [keyIdDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop){
        NSArray *array = [rollImageDict objectsForKeys:obj notFoundMarker:[NSNull null]];
        [newDictionary setObject:array forKey:key];
    }];
    

    【讨论】:

      【解决方案2】:

      我没有mac写代码但是很简单,按照步骤来就行了

      首先迭代字典(字典1)并获取变量中的值

      你会有类似的东西

      607 //first iteration
      431,433,435 // second iteration
      

      然后再次拆分该值并再次对其进行迭代。

      所以现在当您拆分和迭代时,您将拥有607 作为值,迭代每个值。

      每次迭代都从其他字典中获取值

      完成..

      【讨论】:

        【解决方案3】:

        我没有测试,但你可以试试这段代码

            NSMutableDictionary *newDic = [[NSMutableDictionary alloc] initWithCapacity:0];
            for (NSNumber *rollNum in rollImageDict) {
                for (NSString *str in keyIdDict) {
                    NSMutableArray *temp = [[NSMutableArray alloc] initWithCapacity:0];
                    for (NSNumber *keyNum in keyIdDict[str]) {
                        if (rollNum == keyNum) {
                            [temp addObject:rollImageDict[rollNum]];
                        }
                    }
                    newDic[str] = temp;
                }
            }
        

        【讨论】:

        • 我试过你的方法。它可以工作,但它用图像路径替换整个数组。
        • 我改变了一些东西,这样对应的日期在数组中不能有重复的数字。
        • 它崩溃说 *** Collection <__nsarraym:> 在被枚举时发生了变异。
        • 必须在字典1中使用NSMutableArray,NSArray在初始化后不能改变
        • 我同时使用 NSMutableDictionary
        猜你喜欢
        • 1970-01-01
        • 2013-11-06
        • 2014-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多