在另一个nsdictionary中转换plist

时间:2011-10-02 09:40:25

标签: objective-c dictionary nsarray plist

我不是英语,不是客观的新手,也是本网站的新手。但我希望你能理解我的问题。我试图使用搜索引擎,但我找不到答案......

问题: 我有一个像这样的plist文件

<plist version="1.0">
<array>
<dict>
    <key>ID</key>
    <string>001</string>
    <key>CAT</key>
    <string>A</string>
    <key>TITLE</key>
    <string>AAAA01</string>
</dict>
<dict>
    <key>ID</key>
    <string>002</string>
    <key>CAT</key>
    <string>A</string>
    <key>TITLE</key>
    <string>AAAA02</string>
</dict>
<dict>
    <key>ID</key>
    <string>003</string>
    <key>CAT</key>
    <string>B</string>
    <key>TITLE</key>
    <string>BBBB01</string>
</dict>
.....
</array>
</plist>

所以我有很多像这样的条目。每个条目都有一个类别(CAT),如我的例子“A”和“B”。 现在我需要一个代码将其转换为以下内容:

NSArray
    NSDictionary
        CAT => "A"
        VALUES => {"AAAA01","AAAA02"}
    NSDictionary
        CAT => "B"
        VALUES => {"BBBB01", ...}
    ETC.

我的解决方案:

我使用以下代码获取plist

NSString *path = [[NSBundle mainBundle] pathForResource:@"Dictonary" ofType:@"plist"];
arrayIndex = [[NSArray alloc] initWithContentsOfFile:path];

现在我已将所有内容保存在arrayIndex中,但之后我找不到一种方法来转换新数组中的代码以获得我想要的结果。

请有人帮助我吗?

非常感谢你!

1 个答案:

答案 0 :(得分:0)

这是直接编程。
通过两个步骤更容易完成,试图找到要添加的条目。

// First create a dictionary of CAT and the values,
    NSMutableDictionary *tempDict = [NSMutableDictionary dictionary];
    for (NSDictionary *item in arrayIndex) {
        NSString *cat = [item valueForKey:@"CAT"];

        NSMutableArray *tempArray = [tempDict valueForKey:cat];
        if (!tempArray) {
            tempArray = [NSMutableArray array];
            [tempDict setValue:tempArray forKey:cat];
        }

        NSString *v = [item valueForKey:@"TITLE"];
        [tempArray addObject:v];
    }
    NSLog(@"tempDict: %@", tempDict);
// This may well be a good final result


// This step transforms the dictionary into a list of dictionaries    
    NSMutableArray *newList = [NSMutableArray array];
    NSArray *keys = [[tempDict allKeys] sortedArrayUsingSelector:@selector(compare:)];
    for (NSString *cat in keys) {
        [newList addObject:[NSDictionary dictionaryWithObjectsAndKeys:
                            cat, @"CAT",
                            [tempDict valueForKey:cat], @"VALUES",
                            nil]];
    }
    NSLog(@"newList: %@", newList);