Как я могу получить первый элемент в NSDictionary?
У меня есть массив NSDictionaries. Как я могу вытащить первый элемент в словаре?
NSArray *messages = [[results objectForKey:@"messages"] valueForKey:@"message"];
for (NSDictionary *message in messages)
{
STObject *mySTObject = [[STObject alloc] init];
mySTObject.stID = [message valueForKey:@"id"];
stID = mySTObject.stID;
}
Ответы
Ответ 1
В NSDictionary нет элемента "first"; его члены не имеют гарантированного порядка. Если вам нужен только один объект из словаря, но не важно, с каким ключом он связан, вы можете сделать:
id val = nil;
NSArray *values = [yourDict allValues];
if ([values count] != 0)
val = [values objectAtIndex:0];
Ответ 2
NSDictionaries являются неупорядоченными, что означает, что нет первого или последнего элемента. Фактически, порядок ключей никогда не будет гарантирован одинаковым даже в течение жизни конкретного словаря.
Если вы хотите любой объект, вы можете получить один из ключей:
id key = [[message allKeys] objectAtIndex:0]; // Assumes 'message' is not empty
id object = [message objectForKey:key];
Ответ 3
NSArray имеет селектор с именем firstObject
, который упрощает код и делает его более читаемым:
id val = [[yourDict allValues] firstObject];
Если yourDict
пуст val
будет nil
, поэтому нет необходимости проверять размер словаря/массива.
Ответ 4
Согласно Apple, вызовы allKeys
или allValues
берут на себя затраты на создание новых массивов:
Новый массив, содержащий значения словарей, или пустой массив, если словарь не имеет записей (только для чтения)
Итак, альтернативный вариант, который не несет такой стоимости, может выглядеть так:
NSString* key = nil;
for(key in yourDict)
{ // this loop will not execute if the dictionary is empty
break; // exit loop as soon as we enter it (key will be set to some key)
}
id object = yourDict[key]; // get object associated with key. nil if key doesn't exist.
Примечание. Если словарь пуст, ключ останется равным нулю, и возвращенный объект также будет равен нулю, поэтому нам не нужна специальная обработка случая, когда словарь фактически пуст.
Ответ 5
Если кто-то все еще ищет ответ для такого типа ситуации, он может ссылаться на это:
//dict - NSDictionary
//[dict allKeys] предоставит все ключи в текущем символе
//[[dict allKeys] objectAtIndex: 0] будет выдавать из всех объектов ключей в индекс 0, потому что [dict allKeys] возвращает массив.
[[dict allKeys]objectAtIndex:0];
Ответ 6
Простейшие:
[[dict objectEnumerator] nextObject];
Ответ 7
Если у вас NSDictionary с именем ,
Это довольно просто:
message[[[message allKeys] objectAtIndex:0]];
Но вы должны быть уверены (или лучше проверить), что ваш словарь имеет хотя бы один элемент.
Вот как вы можете это проверить:
if ([message allKeys] > 0) NSLog(@"%@", message[[[message allKeys] objectAtIndex:0]]);
Но NSDictionary не имеет гарантированного порядка, поэтому вы, вероятно, должны использовать этот код, только если ваш словарь содержит только один элемент.
[ОБНОВЛЕНИЕ]
Это также хорошая идея использовать это, если вам нужно получить ЛЮБОЙ элемент словаря
Ответ 8
Попробуйте следующее:
NSDictionary *firstValue = [responseObject objectAtIndex:0];