在目标C中,我是否可以以某种方式建立对NSString可变数组的引用



我正在学习Objective-C。我想创建许多名称为a5和c11等的可变NSString数组。第一个是一个由5个字母组成的单词组成的数组,全部以a开头,第二个是由11个字母组成,全部以c开头,依此类推。这样做的目的是随着条目数量的增加而加快搜索速度。我可以使用几个嵌套循环,通过检查要输入的单词的长度及其第一个字母,轻松地将数组的名称构建为字符串。

但是,如果我真的构建了一个字符串"a5",我该如何从那里发送消息[a5消息]

此外,有没有一种方法可以在ArrayManager类中首先声明数组,而无需费力地键入所有单独的数组声明(26*15个数组)?

如果有人能帮忙,谢谢。

Steve Hill

我不知道是否有一种方法可以在Objective-C中合成NSArray名称(实际上我对此表示怀疑),但我建议您使用另一种方法。

您可以使用NSMutableDictionary来收集所有阵列。字典中的关键字是:a5c11等。

您可以向字典中添加一个新数组,如下所示:

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

当然,在现实生活中,你会把所有这些都放在一节课上。

最新更新