基于int创建多个编号变量

时间:2010-02-09 19:17:06

标签: objective-c string variables variable-names

如何使用数组的计数创建多个NSDictionary变量?

这基本上就是我提出的,但我不确定如何使用Objective-C语法来完成这项工作。 doesntContainAnotherNSArray。我希望字典的名称使用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 个答案:

答案 0 :(得分:4)

创建一个可变数组并循环,直到达到原始数组的计数,创建一个字典并在每次迭代时将其添加到可变数组中。

您的代码应如下所示。

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中也不可能。它相当于一个数组,但更笨拙。

答案 1 :(得分:2)

您需要创建一个可变数组,然后将对象放入数组中。您不能像创建一样使用与字符串内容相同的名称创建变量。例如:

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"];

但第一种方式可能是最简单的。