我需要将目标-C中的char值映射为int值。我知道NSDictionary不存在,因为它处理引用类型,而这些是值。在迭代NSString时将使用该映射。字符串中的每个字符将转换为整数值。所有整数都将相加在一起。
使用NSDictionary似乎是不合适的,因为我必须做的所有类型强制。(将值类型char和int转换为引用类型。)
我想,要做到这一点,我必须先转到C语言,但我对C库的经验非常有限。
大多数C开发人员是否使用将char值映射到int值的方法?
编辑用于澄清
C#的等价物是Dictionary<char,int>。
在伪码中,我想说明以下几点:
for (int i = 0; i < [string length]; i++) {
char current = [string characterAtIndex:i];
int score = map[current]; // <- I want map without boxing
// do something with score
}发布于 2011-08-30 17:47:09
如果我正确理解,您希望将chars和ints作为键和值存储在字典中。但是,NSDictionary只接受对象。解决方案是什么?将chars和ints包装在NSNumber对象中:
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:1],
[NSNumber numberWithChar:'a'],
[NSNumber numberWithInt:2],
[NSNumber numberWithChar:'b'],
nil];或者,如果您不想装箱,为什么不直接创建一个接受chars并返回ints的函数呢?
int charToScore(char character)
{
switch (character) {
case 'a':
return 1;
case 'b':
return 2;
default:
return 0;
}
}发布于 2011-08-30 17:41:10
查到int?
char aChar = 'a';
int foo = (int) aChar;好了。不需要哈希什么的。即使您想要映射char -> NSNumber,一个由256个字符组成的数组(char是一个签名的8位类型)也是非常小的开销。
(除非我完全误解了你的问题-你是在问(char*)吗?即C字符串?显示一些代码。)。
发布于 2011-08-30 18:00:28
@Pontus在目标C中有正确的答案,但是如果你愿意使用C++,你可以使用std::map<char, int> (或者仍然有点不标准的unordered_map<char, int>)。
要在Objective中使用C++,必须将文件从Whatever.m重命名为Whatever.mm--这告诉GCC该文件包含Objective++,它允许您使用带有C++基础结构的Objective语法。
https://stackoverflow.com/questions/7247340
复制相似问题