假设我有以下内容:
typedef enum functionType {ln, sin, sqrt} functionType;
NSArray *functions = [NSArray arrayWithObjects: @"ln", @"sin", @"sqrt", nil];
进一步假设*函数在运行时不会改变。
问题 - 有没有办法设置一个更新这两个结构的结构?所以我只需要跟踪一个列表,而不是两个。
为了解释发生了什么 - 想法是来自用户的字符串输入将存储在functionType类型的变量中。稍后,我会有这样的代码:
double valueOfFunction: (functionType) function withInput: (double) input
switch (function) {
case ln:
return ln(input);
case sin:
return sin(input);
case sqrt:
return sqrt(input);
//etc . . . could grow to include a lot of functions.
}
而valueOfFunction需要很快。所以我不想在那里进行字符串比较。
答案 0 :(得分:4)
听起来你想要一个从字符串到枚举对象的地图。有很多方法可以做到这一点。
您可以使用带有NSString键的NSDictionary和表示对象的NSNumber编码的int。
你可以使用函数名的NSArray(@“ln”,@“sin”等),只将索引存储到数组中;这基本上摆脱了枚举。
如果你真的想要一个枚举类型和字符串对象的连接列表,你也可以这样做:
typedef enum FunctionType {
ln, sin, cos, tan, exp
} FunctionType;
typedef struct FunctionItem {
FunctionType type;
NSString *name;
} FunctionItem;
FunctionItem functions[] = {
{ln, @"ln"},
{sin, @"sin"},
{cos, @"cos"},
{tan, @"tan"},
{exp, @"exp"},
};
请注意符号冲突!你不能拥有一个名为sin的枚举标识符,也可以使用标准的sin()函数。
祝你的计算器型应用好运!