Подтвердить что ты не робот

Как я могу получить первый элемент в 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;
    }
4b9b3361

Ответ 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];