Доступ к массиву / множеству объектов с ключами - PullRequest
0 голосов
/ 01 февраля 2012

Я хочу иметь возможность добавлять объекты в NSArray и получать к ним доступ с помощью клавиш.В настоящее время я делаю это, создавая отдельные NSDictionary пар ключ-значение, где значение представляет собой целое число, представляющее индекс в моем NSArray.Это кажется мне дополнительным шагом.

Если мое понимание NSDictionary верно, могут быть сохранены только «значения»: указатель на объект не может.

Конечно, должна быть эквивалентная функция типа NSDictionary, которая позволяетобъекты для хранения и доступа с ключом?Я просмотрел документацию, но, похоже, не могу найти никаких ответов, если только я не пропустил что-то очевидное.

Ответы [ 6 ]

1 голос
/ 01 февраля 2012

Короче, нет.

Массив (NSArray) представляет собой упорядоченную коллекцию ссылок на объекты, так сказать, упорядоченную коллекцию объектов .
В отличие от словарей, которые неупорядочены изначения доступны через ключи.

Вы понимаете коллекций , вероятно, неправильно, вы не храните значения, но указатели (ссылки).

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

[myDictionary objectForKey:@"1"];

может быть эквивалентно:

[myArray objectAtIndex:1];
1 голос
/ 01 февраля 2012

Вы можете хранить объекты в NSDictionary, и к ним можно получить доступ через keys ...

1 голос
/ 01 февраля 2012

NSDictionary предназначен для хранения пар ключ-значение.если вы добавляете пару ключ-значение после того, как создали диктовку, используйте класс NSMutableDictionary.Например,

[dictionaryObject setObject:@"" forKey:@"abc"];
0 голосов
/ 01 февраля 2012

Мне кажется, я понимаю вашу проблему.Я предлагаю вам использовать NSMutableArray и макросы, например:

NSMutableArray *array=[[NSMutableArray alloc]init];
#define SOME_MACRO 0
    id someObject;
    [array insertObject:someObject atIndex:SOME_MACRO];
    id getterObject=[array objectAtIndex:SOME_MACRO];


Конечно, определите макросы в заголовочном файле.
0 голосов
/ 01 февраля 2012

У меня нет опыта работы с Какао, но, глядя на документацию, кажется, что NSDictionary (или, по крайней мере, NSMutableDictionary) должны обработать ваш запрос (без использования NSArray).

0 голосов
/ 01 февраля 2012

Это неправильно, вы можете хранить объекты в NSDictionary. Посмотрите на метод dictionaryWithObjects:forKeys: или dictionaryWithObjectsAndKeys:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...