превращая лист в другой - PullRequest
0 голосов
/ 02 октября 2011

Я не англичанин, новичок в цели c и новичок в этом сайте.Но я надеюсь, что вы поймете мою проблему.Я пытался использовать поисковую систему, но не смог найти ответ ...

ПРОБЛЕМА: у меня есть файл 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.

МОЕ РЕШЕНИЕ:

я получаю список со следующим кодом

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

Теперь у меня естьвсе сохранено в arrayIndex, но тогда я не могу найти способ преобразовать код в новый массив, чтобы получить желаемый результат.

, пожалуйста, кто-нибудь может мне помочь?

СПАСИБО!1018 *

1 Ответ

0 голосов
/ 02 октября 2011

Это прямое программирование.
Это проще сделать за два шага, не пытаясь найти запись для добавления.

// 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);
...