在Objective C中,我可以以某种方式构建对NSStrings的可变数组的引用吗?

时间:2011-06-07 13:29:27

标签: objective-c

我正在学习Objective-C。我想创建很多可变的NSStrings数组,其名称类似于a5和c11等。第一个是一个5个字母的单词数组,所有单词都以a开头,第二个是11个单词的数组,所有单词都以c开头,等等。这个想法是为了加快搜索速度,因为条目数量变得非常大。我可以使用几个嵌套循环并通过检查我想要输入的单词的长度及其第一个字母,轻松地将数组的名称构建为字符串。

但如果我构建一个字符串“a5”,我该如何从那里发送消息[a5 message]

另外,有没有办法我可以先在ArrayManager类中声明数组,而不必费心地输入所有单独的数组声明(26 * 15数组)?

谢谢,如果有人可以提供帮助。

史蒂夫希尔

2 个答案:

答案 0 :(得分:3)

我不知道是否有办法在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级别具有符号名称,它们具有对您的程序有意义且允许您使用它们的名称。

答案 1 :(得分:0)

您无法直接执行此操作,因为变量名称“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"];

当然,你要把所有这些都包含在现实生活中的课堂上。