在Objective-C中将char映射到int

时间:2011-08-30 17:32:27

标签: objective-c map char int

我需要在Objective-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
}

3 个答案:

答案 0 :(得分:3)

Char to int?

char aChar = 'a';
int foo = (int) aChar;

完成。不需要哈希或其他任何东西。即使你想映射char - &gt; NSNumber是一个256个字符的数组(char是一个带符号的8位类型),开销非常小。

(除非我完全误解了你的问题 - 你要求(char *)?...即C字符串?显示一些代码。)。

答案 1 :(得分:0)

如果我理解正确,您希望将charint存储在字典中,作为键和值。但是,NSDictionary只接受对象。解决方案?将charint包裹在NSNumber对象中:

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                      [NSNumber numberWithInt:1],
                      [NSNumber numberWithChar:'a'],
                      [NSNumber numberWithInt:2],
                      [NSNumber numberWithChar:'b'], 
                      nil];

或者如果你不想拳击,为什么不只是制作一个需要char并返回int s的函数?

int charToScore(char character)
{
    switch (character) {
        case 'a':
            return 1;
        case 'b':
            return 2;
        default:
            return 0;
    }
}

答案 2 :(得分:0)

@Pontus在Objective-C中有正确的答案,但是如果你愿意使用C ++,你可以使用std::map<char, int>(或者仍然稍微不标准的unordered_map<char, int>。)

要在Objective-C中使用C ++,您必须将文件从Whatever.m重命名为Whatever.mm - 这告诉GCC该文件包含Objective-C ++,它允许您使用Objective-带有C ++基础的C语法。