Как извлечь данные из вложенного массива по ключу в массиве - PullRequest
0 голосов
/ 29 марта 2012

Здравствуйте, друзья, у меня есть массив массивов, как показано ниже: -`

parrent array{
    PrArr =       

(

            {
                dt = "01-Apr-2012 11:15 PM\n";
                dur = "15\n\t\t";
                name = "Tez Special\n\t\t";
            },
                        {
                dt = "01-Apr-2012 11:30 PM\n\n";
                dur = "30\n\t\t";
                name = "Tez Tare\n\t\t";
            }
        );
        sid = "530\n";
    },

        {
        PrArr =         (

            {
                dt = "01-Apr-2012 11:20 PM\n";
                dur = "20\n\t\t";
                name = "Shiv Yog - Acharya Ishan Shivanandji\n\t\t";
            },
                        {
                dt = "01-Apr-2012 11:40 PM\n\n\n\t";
                dur = "20\n\t\t";
                name = "Param Pujya Swami HariChaitanya Puriji Maharaj\n\t\t";
            };
            sid = "560\n";
    },

} Я хочу получить данные в соответствии с sid в массиве.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 29 марта 2012

Если вы пытаетесь найти словарь, в котором sid равен чему-то, вам нужно будет использовать NSPredicate .

Из яблочной документации:

Предикаты предоставляют общие средства определения запросов в Какао. Система предикатов способна обрабатывать большое количество доменов, а не просто, например, Core Data или Spotlight. Этот документ описывает предикаты в целом, их использование, их синтаксис и их ограничения.

С NSPredicate вы можете найти все sid, которые соответствуют вашему запросу.

Я приведу вам пример. Основываясь на массиве, который вы разместили здесь, вы хотите вернуть запись, у которой sid равен @ "530 \ n", что вам нужно сделать:

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"sid LIKE %@",@"530\n"];
NSDictionary* entry = [[parentArray filteredArrayUsingPredicate:predicate] objectAtIndex:0];

Но если вы пытаетесь отсортировать ваш массив на основе sid, вы можете использовать NSSortDescriptor , который вернет ваш массив, отсортированный по sid.

Из яблочной документации:

Дескриптор сортировки описывает сравнение, используемое для сортировки коллекции объекты. Вы создаете экземпляр NSSortDescriptor, который определяет ключ свойства для сортировки, и должно ли сравнение быть в по возрастанию или по убыванию. Дескриптор сортировки также может указывать метод, который используется при сравнении значений ключа свойства, а не по умолчанию сравнения:.

Важно помнить, что NSSortDescriptor не сортирует объекты. Он предоставляет описание того, как сортировать объекты. фактическая сортировка выполняется другими классами, часто NSArray или NSMutableArray.

Один пример для вас

NSSortDescriptor *sidDescriptor= [[NSSortDescriptor alloc] initWithKey:@"sid" ascending:YES];
NSArray* sortDescriptors = [NSArray arrayWithObject:sidDescriptor];    
NSArray* sortedArray = [parentArray sortedArrayUsingDescriptors:sortDescriptors];
0 голосов
/ 29 марта 2012

Я только осторожно пишу, проверь, поможет ли тебе что-то подобное.

NSSortDescriptor *sidDescr = [[NSSortDescriptor alloc] initWithKey:@"sid" ascending:YES];
sortDescriptors =  [NSArray arrayByAddingObject:sidDescr];    
NSArray * sortedArr = [*yourparentarray* sortedArrayUsingDescriptors:sortDescriptors];
...