我正在学习Objective-C。我想创建许多名称为a5和c11等的可变NSString数组。第一个是一个由5个字母组成的单词组成的数组,全部以a开头,第二个是由11个字母组成,全部以c开头,依此类推。这样做的目的是随着条目数量的增加而加快搜索速度。我可以使用几个嵌套循环,通过检查要输入的单词的长度及其第一个字母,轻松地将数组的名称构建为字符串。
但是,如果我真的构建了一个字符串"a5",我该如何从那里发送消息[a5消息]
此外,有没有一种方法可以在ArrayManager类中首先声明数组,而无需费力地键入所有单独的数组声明(26*15个数组)?
如果有人能帮忙,谢谢。
Steve Hill
我不知道是否有一种方法可以在Objective-C中合成NSArray
名称(实际上我对此表示怀疑),但我建议您使用另一种方法。
您可以使用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级别的符号名称,而是具有对程序有意义的名称,并允许您使用它们。
不能直接执行,因为变量名"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"];
当然,在现实生活中,你会把所有这些都放在一节课上。