В Objective C я могу как-то создать ссылку на изменяемый массив строк NSStrings? - PullRequest
1 голос
/ 07 июня 2011

Я изучаю Objective-C.Я хотел бы создать множество изменяемых массивов строк NSS с именами, такими как a5 и c11 и т. Д. Первый - это массив 5-буквенных слов, начинающихся с a, второй - массив из 11 букв, начинающихся с c искоро.Идея состоит в том, чтобы ускорить поиск, так как количество записей становится очень большим.Я могу легко создать имя массива в виде строки, используя несколько вложенных циклов и изучив длину слова, которое я хочу ввести, и его первую букву.

Но если я построю строку "a5 "как мне добраться оттуда до отправки сообщения [a5 message]

Кроме того, есть ли способ, которым я могу сначала объявить массивы в своем классе ArrayManager без тщательного ввода всех объявлений отдельных массивов (26 *15 массивов)?

Спасибо, если кто-нибудь может помочь.

Стив Хилл

Ответы [ 2 ]

3 голосов
/ 07 июня 2011

Я не знаю, есть ли способ синтезировать имя NSArray в Objective-C (и я сомневаюсь в этом, на самом деле), но я бы предложил вам альтернативный подход.

Вы можете использовать NSMutableDictionary, чтобы собрать все ваши массивы. Ключи в словаре: a5, c11 и т. Д.

Вы бы добавили новый массив в словарь, как это:

NSMutableDictionary allArrays = [[NSMutableDictionary alloc] init];
NSString* arrayName = @"...";
NSMutableArray* words = ...
[dict setObject:words forKey:arrayName];
....
....
[self doSomething:[dict objectForKey:@"a5"]]; //-- here you would access the array

Скажите, что вместо ваших массивов, имеющих символические имена на уровне Objective-C, у них есть имена, которые имеют значение для вашей программы и которые позволяют вам использовать их.

0 голосов
/ 07 июня 2011

Вы не можете сделать это напрямую, потому что имя переменной «a5» не имеет никакого значения вне вашего исходного кода.Как только он скомпилирован, это просто адрес.

Я бы использовал словарь, подобный этому:

 NSMutableDictionary* index = [[NSMutableDictionary alloc] init];

 for (char letter = 'a' ; letter <= 'z' ; ++letter)
 {
     for (int length = 1 ; length <= 15 ; ++length)
     {
         NSString* key = [NSString stringWithFormat: @"%c%02d", letter, length]; // lengths are padded in case sorting is needed
         [index setObject: [NSMutableArray array] forKey: key];
     }
 }

, который предварительно создает все ваши массивы для всех комбинаций букв и цифр.Чтобы использовать определенный массив:

[[index objectForKey: @"a08"] addObject: @"aardvark"];

Конечно, вы бы обернули все это в класс в реальной жизни.

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