【发布时间】:2011-10-24 18:48:41
【问题描述】:
我有相当多的代码行来创建对象并使用具有相似对象名称和构造函数的各种参数。唯一改变的是正在创建的对象变量的实际名称,以及传入的对象本身的名称。下面是一个与我当前设置匹配的代码示例:
BackyardObject backyardObject0 = new BackyardObject(cat0, dog0, goat0, piglet0);
BackyardObject backyardObject1 = new BackyardObject(cat1, dog1, goat1, piglet1);
BackyardObject backyardObject2 = new BackyardObject(cat2, dog2, goat2, piglet2);
BackyardObject backyardObject3 = new BackyardObject(cat3, dog3, goat3, piglet3);
BackyardObject backyardObject4 = new BackyardObject(cat4, dog4, goat4, piglet4);
// many many more BackyardObjects being instantiated
正如我们所见,正在创建的对象的名称与传递给构造函数的对象的名称完全匹配。是否可以创建一个循环来设置所有这些?
编辑
我想我可能缺少获得此问题正确答案所需的详细信息。这不是关于“如何”使用循环或如何将项目添加到集合中的问题,更多的是确定是否可以在循环内动态创建“变量名”,同时访问循环内部动态的另一个变量名提供了上面给出的信息(只是现场编写的代码)。
// psuedo code for something I'm asking is possible
for( i = 0; i < 10; i++)
{
// create BackyardObject with generic name, while appending "i" to
// variable name, and accessing other object variables
BackyardObject backyardObject'i'
= new backyardObject(cat'i', dog'i', goat'i', piglet'i');
}
虽然我知道我可以创建额外的数组和列表来存储对象然后使用它们,但我只是想看看是否可以动态获取变量名。我不确定这是否完全可能,这就是我问这个问题的原因。我知道这是一个奇怪的问题,但是在我看到这段 Objective-C 代码后很好奇:
// Getting an arrayName dynamically based on loop index
for (int i = 0; i < 10; i++)
{
NSString *arrayName = [[NSString alloc] initWithFormat:@"column%d",
i];
NSArray *array = [self valueForKey:arrayName];
}
【问题讨论】:
-
称为数组。使用它。
-
是的。这个问题的重要部分是数据是如何存储的,而不是你如何构建
BackyardObjects。那么...您如何解决catX、dogX、goatX和pigletX? -
你需要看一个基本的控制流教程。循环对于即使是最简单的任务也至关重要,并且至少在基本层面上可以理解。
-
我很抱歉一开始没有提供更多信息,但请参阅上面问题的编辑。这不是如何使用循环等。