Чтение из списка, но принимает только определенные строки - PullRequest
0 голосов
/ 03 апреля 2012

Цель состоит в том, чтобы иметь массив, в котором все строки имеют длину n.

Итак, в данный момент мой код выполняет чтение в plist (который составляет всего 250 000 строк) в массив, а затем перебирает массив, чтобы найти, какие из них имеют / не имеют длину n. Конечно, для эффективности я предпочел бы иметь возможность считывать данные из списка STRING BY STRING, поэтому, пока я читаю, я могу определить длину перед вставкой в ​​массив. Я только начинаю изучать цель-c, но я боролся с Google вокруг решения = P

РЕДАКТИРОВАТЬ: Ну, я только что узнал, что я могу найти гораздо больше документации, набрав список свойств, а не plist в Google :), так что я могу быть в состоянии понять это сам

Ответы [ 2 ]

3 голосов
/ 03 апреля 2012

Вы можете разобрать plist в дерево (NSMutableDictionary). У Dict будут ключи с именем длины строки.

например

NSMutableDictionary *result = [NSMutableDictionary dictionary];

for (NSString *str in [plistDict allObjects]) {

    NSString *key = [NSString stringWithFormat:@"%d", [str length]];

    NSMutableArray *array = [result objectForKey:key];
    if (!array) {
        array = [NSMutableArray array];
    }
    [array addObject:str];
    [result setObject:array forKey:key];
}

чем вы можете получить доступ к массиву с необходимой длиной строки

NSArray *string4Lenght = [result objectForKey:@"4"];
1 голос
/ 03 апреля 2012

Apple не предоставляет API для поэтапного анализа plist.

Если вы храните свой список в формате XML, вы можете использовать NSXMLParser для его анализа. Схема довольно проста и несколько описана в Руководстве по программированию списка свойств .

Если вы хотите постепенно разбирать двоичный формат, вам придется проделать больше работы. Там нет официальной документации для формата. Исходный код Apple для чтения и записи в формате является открытым исходным кодом (CFBinaryPList.c), и есть некоторые полезные комментарии наряду с фактическим кодом.

Если вам действительно нужно делать это постепенно, я предлагаю пойти по XML-маршруту. Если вы это сделаете, вы можете захотеть создать подкласс NSInputStream, чтобы иметь возможность читать из файла gzip или bzip2 и распаковывать на лету.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...