初始化具有大量值的数组和字典

时间:2012-03-16 01:59:28

标签: objective-c c

我需要能够在源代码中使用一些预定义的值初始化数组,看起来有点像下面的内容。但是每个数组可能有数千个值。

@"key",@"value",
@"key",@"value",
@"key",@"value",
@"key",@"value",
...etc...

如何使用这些值初始化(例如)NSDictionary,而不必将数千个值与源代码内联,即:

tokens = [[NSDictionary alloc] initWithObjectsAndKeys:
    #import "keyvaluepairs1.h"
    #import "keyvaluepairs2.h"
    , nil];

甚至只是这样的纯数组:

char[] tokens = {
    #import "schoolnames.h"
    #import "universitynames.h"
    }

我正在寻找的不是客观的“技巧”,而是更多地了解如何指导编译器导入或吸入其他文件的内容。如果需要,我愿意接受有关如何实现这一目标的其他想法。

3 个答案:

答案 0 :(得分:3)

您可以创建一个作为NSArrays的NSDictionary的plist。然后轻松地将plist读入NSDictionary,然后从中检索每个数组。

 NSString *path = [[NSBundle mainBundle] pathForResource:@"yourFile" ofType:@"plist"];
 NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
 NSArray *array = [dict objectForKey:@"array1"];

正如所指出的那样,每次从“未运行”的应用程序加载应用程序时,至少需要阅读一次。状态

答案 1 :(得分:0)

如果您的文本文件采用上面显示的格式,则需要编写一个简单的解析器来将数据读入NSDictionary

由于格式“词汇表”很简单,基于NSScanner的线性解析器可以直接实现。

答案 2 :(得分:0)

经过多次搜索,我相信我已经找到了一种简单的方法来实现这一点,而无需确保到处都有文本文件。您可以使头文件看起来像这样:

#define  SAMPLE_ARRAY \
@"a",   @"value",\
@"b",   @"value",\
@"c",   @"value",\
...etc...

然后像这样导入或使用它们:

tokens = [[NSDictionary alloc] initWithObjectsAndKeys:
    SAMPLE_ARRAY
    SAMPLE_ARRAY2
    nil];

鉴于数据永远不会改变,我看不出任何重大问题。