Создайте несколько пронумерованных переменных на основе int - PullRequest
5 голосов
/ 09 февраля 2010

Как бы я создал число NSDictionary переменных, используя счетчик массива?

Это в основном то, что я придумал, но я не уверен, как заставить это работать с синтаксисом Objective-C. doesntContainAnother является NSArray. Я хочу, чтобы имена словарей использовали текущее значение loopInt.

int *loopInt = 0;
while (doesntContainAnother.count <= loopInt) {

    NSMutableDictionary *[NSString stringWithFormat:@"loopDictionary%i", loopInt] = [[[NSMutableDictionary alloc] init] autorelease];
    [NSString stringWithFormat:@"loopDictionary%i", loopInt] = [NSDictionary dictionaryWithObject:[array1 objectAtIndex:loopInt] 
                                                 forKey:[array2 objectAtIndex:loopInt]];
    loopInt = loopInt + 1;
}

Ответы [ 2 ]

4 голосов
/ 09 февраля 2010

Создайте изменяемый массив и цикл, пока не достигнете счетчика исходного массива, создав словарь и добавив его в изменяемый массив на каждой итерации.

Ваш код должен выглядеть следующим образом.

NSMutableArray *dictionaries = [[NSMutableArray alloc] init];
for (int i = 0; i < doesntContainAnother.count; i++) {
    [dictionaries addObject:[NSMutableDictionary dictionaryWithObject:[array1 objectAtIndex:i] forKey:[array2 objectAtIndex:i]]];
}

Подход к созданию переменных с числами в конце их имен является антипаттерном и даже невозможен в Objective-C. Это эквивалентно массиву, но более грубое.

2 голосов
/ 09 февраля 2010

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

NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:[doesntContainAnother count]];
int i = 0;    // Note: type is int, not int*
for (i = 0; i < [doesntCountainAnother count]; i++) {
    [arr addObject:[NSMutableDictionary dictionary]];
}

// Later...
NSMutableDictionary *d1 = [arr objectAtIndex:3];

Или, если вы хотите вытащить их из списка по имени:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:[doesntCountainAnother count]];
int i = 0;
for (i = 0; i < [doesntContainAnother count]; i++) {
    [dict setObject:[NSMutableDictionary dictionary] forKey:[NSString stringWithFormat:@"loopDictionary%d", i]];
}

// Later...
NSMutableDictionary *d1 = [dict objectForKey:@"loopDictionary3"];

Но первый способ, вероятно, самый простой.

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