Ключ, значение и индекс

Моя проблема довольно проста. У меня есть некоторые данные, связанные с ключом. Ключ и данные оба NSString. Итак, первое, что приходит мне в голову, это использовать NSDictionary. Обычно я обращаюсь к значению так: [myDict objectForKey:@"myKey"]; Однако иногда мне нужно получить доступ к значению по индексу.

образец: [myDict objectAtIndex: indexPath.row]

Но, конечно, в словаре нет указателя.

Есть много решений для решения этой проблемы, но я хотел бы знать, какое из них является лучшим.

Как лучше всего получить доступ к значению с помощью его ключа или индекса?


person bldcoco    schedule 17.01.2013    source источник


Ответы (3)


Создайте свой собственный класс, скажем, DictionArray, имеющий свойства массивов и словарей.

Добавьте свойства NSInteger index, NSString *value и т. д. и несколько методов для извлечения на основе индекса и ключей.

person Anoop Vaidya    schedule 17.01.2013

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

NSString *key = [keys objectAtIndex: indexPath.row];

и получить объект:

NSString *value = [myDict objectForKey:key];
person Andrey Chernukha    schedule 17.01.2013

Смысла в этом особого нет, так как словари неупорядочены, но если вам это все равно нужно:

id nthKey = [[dict allKeys] objectAtIndex:idx];
id nthObj = [dict objectForKey:nthKey];
person Community    schedule 17.01.2013
comment
Я согласен с @AndreyChernukha. - person Anoop Vaidya; 17.01.2013
comment
Да, это может быть решением, но, как сказал @AndreyChernukha, оно может дать неправильное значение. Мне не обязательно нужен словарь, это может быть и двухмерный массив. Я просто хотел бы знать наиболее адаптированное и оптимизированное решение. - person bldcoco; 17.01.2013
comment
@bldcoco: H2CO3 - это мой SIR, и, как он упомянул dictionaries are unordered, поэтому, если вы добавите новый объект (setObject: forKey :), дело не в том, что он будет добавлен в какой индекс, поэтому становится трудно получить все преобразование dict в массив и попасть в такой порядок. Однако вы можете использовать ключ как [NSString stringWithFormat:@"key-%d",indexPushed], тогда вы сможете искать и сортировать словарь. - person Anoop Vaidya; 17.01.2013