Преобразовать NSMutableArray в NSDictionary для использования objectForKey? - PullRequest
3 голосов
/ 06 января 2012

У меня есть NSMutableArray, который выглядит следующим образом

 {
    "@active" = false;
    "@name" = NAME1;
 },
 {
    "@active" = false;
    "@name" = NAME2;
 }

Есть ли способ преобразовать это в NSDictionary и затем использовать objectForKey, чтобы получить массив объектов имени? Как еще я могу получить эти объекты?

Ответы [ 6 ]

7 голосов
/ 06 января 2012

Существует еще более короткая форма, чем эта, предложенная Хьюбертом

NSArray *allNames = [array valueForKey:@"name"];

valueForKey: в NSArray возвращает новый массив, отправляя valueForKey:givenKey всем его элементам.

Из документов :

valueForKey:
Возвращает массив, содержащий результаты вызова valueForKey: с использованием key для каждого из объектов массива.

- (id)valueForKey:(NSString *)key

Параметры
key Ключ для извлечения.

Возвращаемое значение
Значение найденного ключа.

Обсуждение
Возвращенный массив содержит NSNull элементов для каждого объекта, который возвращает nil.

* +1040 * Пример: * * тысяча сорок один
NSArray *array = @[@{ @"active": @NO,@"name": @"Alice"},
                   @{ @"active": @NO,@"name": @"Bob"}];

NSLog(@"%@\n%@", array, [array valueForKey:@"name"]);

результат:

(
        {
        active = 0;
        name = Alice;
    },
        {
        active = 0;
        name = Bob;
    }
)
(
    Alice,
    Bob
)
3 голосов
/ 10 июня 2013

Если вы хотите преобразовать NSMutableArray в соответствующий NSDictionary, просто используйте mutableCopy

NSMutableArray *phone_list; //your Array
NSDictionary *dictionary = [[NSDictionary alloc] init];
dictionary = [phone_list mutableCopy];
3 голосов
/ 06 января 2012

Это массив объектов словаря, поэтому для получения значений вы должны:

[[myArray objectAtIndex:0]valueForKey:@"name"]; //Replace index with the index you want and/or the key.
1 голос
/ 29 октября 2015

Это пример одного из примеров получения списка emplyee NSMutableArray и создания NSMutableDictionary .......

NSMutableArray *emloyees = [[NSMutableArray alloc]initWithObjects:@"saman",@"Ruchira",@"Rukshan",@"ishan",@"Harsha",@"Ghihan",@"Lakmali",@"Dasuni", nil];

NSMutableDictionary *dict = [NSMutableDictionary dictionary];
for (NSString *word in emloyees) {
    NSString *firstLetter = [[word substringToIndex:1] uppercaseString];
    letterList  = [dict objectForKey:firstLetter];

    if (!letterList) {
        letterList = [NSMutableArray array];
        [dict setObject:letterList forKey:firstLetter];
    }
    [letterList addObject:word];
}   NSLog(@"dic %@",dict);
1 голос
/ 06 января 2012

да, вы можете

см. Этот пример:

NSDictionary *responseDictionary = [[request responseString] JSONValue];
NSMutableArray *dict = [responseDictionary objectForKey:@"data"];
NSDictionary *entry = [dict objectAtIndex:0];
NSString *num = [entry objectForKey:@"num"]; 
NSString *name = [entry objectForKey:@"name"];
NSString *score = [entry objectForKey:@"score"];

мне очень жаль, если я не могу подробно остановиться, потому что я также работаю над чем-то

, но я надеюсьэто может помочь вам:)

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

Нет, ребята .... проблема в том, что вы используете механизм KeyValue в какао.

KeyValueCoding указывает, что символ @count может использоваться в keyPath ....

туАггау. @ Подсчитывать

SOOOOOO .... просто переключитесь на ObjectForKey и все в порядке!

NSMutableDictionary *myDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"theValue", @"@name", nil];

id kvoReturnedObject = [myDictionary valueForKey:@"@name"]; //WON'T WORK, the @ symbol is special in the valueForKey
id dictionaryReturnedObject = [myDictionary objectForKey:@"@name"];

NSLog(@"object = %@", dictionaryReturnedObject);
...