Из массива словарей сделать массив, содержащий значения одного ключа

У меня есть набор словарей. Я хотел бы извлечь массив со всеми элементами одного конкретного ключа словарей в исходном массиве. Можно ли это сделать без перечисления?


person RunLoop    schedule 21.04.2010    source источник


Ответы (2)


Да, используйте NSArray -valueForKey: метод.

NSArray *extracted = [sourceArray valueForKey:@"a key"];
person David Gelhar    schedule 21.04.2010
comment
@e.James, ты узнаешь, если спросишь и проявишь любопытство. Мне пришла в голову мысль, как это реализовать, потому что я не хотел зацикливаться и делать в стиле старой школы. Я рад, что искал способ сделать это, и, как вы говорите, узнал еще одну новую вещь, приветствую вас каждый день! :) - person Itai Spector; 15.09.2016
comment
Можем ли мы сделать это для набора ключей, или это доступно только для одного ключа? - person nr5; 29.07.2017
comment
Такой метод доступен в Swift? - person Mathi Arasan; 09.08.2017
comment
@user3589771 user3589771 проверьте этот вопрос stackoverflow.com/questions/26367261/ для некоторых возможных решений в Swift - person David Gelhar; 09.08.2017
comment
Спасибо, я видел, что Принятый ответ у меня не работает. Наконец, я использовал этот ответ. Я пробовал, если Swift предоставляет одну строку, например obj-c. - person Mathi Arasan; 10.08.2017

Да, просто используйте Key-Value Coding, чтобы запросить значения ключа:

NSArray* names = [NSArray arrayWithObjects:
                  [NSDictionary dictionaryWithObjectsAndKeys:
                   @"Joe",@"firstname",
                   @"Bloggs",@"surname",
                   nil],
                  [NSDictionary dictionaryWithObjectsAndKeys:
                   @"Simon",@"firstname",
                   @"Templar",@"surname",
                   nil],
                  [NSDictionary dictionaryWithObjectsAndKeys:
                   @"Amelia",@"firstname",
                   @"Pond",@"surname",
                   nil],
                  nil];

//use KVC to get the names
NSArray* firstNames = [names valueForKey:@"firstname"];

NSLog(@"first names: %@",firstNames);
person Rob Keniger    schedule 21.04.2010